J'essaie d'exécuter ce code JPA / EJB de base:
public static void main(String[] args){
UserBean user = new UserBean();
user.setId(1);
user.setUserName("name1");
user.setPassword("passwd1");
em.persist(user);
}
J'obtiens cette erreur:
javax.ejb.EJBException: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.JPA.Database
Des idées?
Je recherche sur Internet et la raison pour laquelle j'ai trouvé était:
Cela était dû à la façon dont vous avez créé les objets, c'est-à-dire si vous définissez explicitement la propriété ID. La suppression de l'attribution d'identité l'a corrigé.
Mais je ne l'ai pas compris, que vais-je devoir modifier pour que le code fonctionne?
Disons que vous avez deux entités Album
et Photo
. L'album contient de nombreuses photos, c'est donc une relation un à plusieurs.
Classe d'album
@Entity
public class Album {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
Integer albumId;
String albumName;
@OneToMany(targetEntity=Photo.class,mappedBy="album",cascade={CascadeType.ALL},orphanRemoval=true)
Set<Photo> photos = new HashSet<Photo>();
}
Cours de photo
@Entity
public class Photo{
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
Integer photo_id;
String photoName;
@ManyToOne(targetEntity=Album.class)
@JoinColumn(name="album_id")
Album album;
}
Ce que vous devez faire avant de persister ou de fusionner est de définir la référence de l'album dans chaque photo.
Album myAlbum = new Album();
Photo photo1 = new Photo();
Photo photo2 = new Photo();
photo1.setAlbum(myAlbum);
photo2.setAlbum(myAlbum);
Voilà comment attacher l'entité associée avant de conserver ou de fusionner.
Cet article est collecté sur Internet, veuillez indiquer la source lors de la réimpression.
En cas d'infraction, veuillez [email protected] Supprimer.
laisse moi dire quelques mots