J'ai un problème pour conserver une Entité et obtenir l'ID après que la persistance se soit produite. Je peux voir que les données ont été créées dans la base de données, avec le bon identifiant, mais l'identifiant est toujours nul sur l'objet.Eclipselink - L'ID après la persistance est toujours NULL
Heres mon entité:
@Entity
public class Bookmark {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String name;
@Column(nullable = false)
@Temporal(TemporalType.DATE)
private Date createdAt;
@ManyToOne
private Page page;
@ManyToOne
private Color color;
@ManyToOne
private User user;
...
..
Et voici mon code où je créer l'entité:
//init bookmark from json basic data
Bookmark bookmark = new Bookmark(currentUser,page);
bookmark.setName(name);
bookmark.setColor(color);
//set User relationship for the bookmark
currentUser.getBookmarks().add(bookmark);
//save the altered entities
tx.begin();
em.merge(currentUser);
em.persist(bookmark);
tx.commit();
//Build the response
System.out.println("uriInfo:"+uriInfo+ "bookmark:"+bookmark);
URI bookmarkUri = uriInfo.getAbsolutePathBuilder().path(bookmark.getId().toString()).build();
Je reçois une exception NullPointer à la dernière ligne, car les résultats getId() dans nul. Comment puis-je éviter cela?
Je définis le niveau de débogage un peu plus haut et vois quelque chose comme ça: RollbackException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.1.1.v20100817-r8050): org.eclipse.persistence.exceptions.DatabaseException Exception interne: org.postgresql.util.PSQLException: ERREUR: la valeur null dans la colonne "id" ne respecte pas la contrainte non nulle Code d'erreur: 0 Appel: INSERT INTO BOOKMARK (CREATEDAT, NOM, COLOR_ID, USER_ID, PAGE_ID) VALEURS (? ,?,?,?,?) \t bind => [2010-11-27, TestBookmark, 1, 1, 3] Requête: InsertObjectQuery (Bookmark avec id null pour la page 22 du livre 'BlaBook' avec l'ID 1) – LeonS
Il semble que cela dépend de Tomcat, parce que mes tests JUnit sont très bien. Quel pourrait être le problème avec le code dans le contexte d'une servlet Tomcat? – LeonS
Un autre fait étrange: sortie de \t \t System.out.println ("Contient:" + em.contains (signet)); est "Contient: faux", il semble donc que l'objet n'est pas géré par le gestionnaire d'entités – LeonS