エンティティを保持し、永続化が発生した後にIDを取得するのに問題があります。 データが正しいIDでデータベースに作成されたことがわかりましたが、idはまだオブジェクトでnullです。Eclipselink - 永続化後のIDがまだヌルです
HERESに私のエンティティ:
@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;
...
..
そして、ここでは、私はエンティティを作成し、私のコードです:
//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();
のgetId()の結果であるため、私は最後の行でnullポインタ例外を取得していますヌル。 どうしたらいいですか?
私はデバッグレベルを多少高く設定しています。RollbackException:Exception [EclipseLink-4002](Eclipse Persistence Services - 2.1.1.v20100817-r8050):org.eclipse.persistence.exceptions.DatabaseException 内部例外:org.postgresql.util.PSQLException:ERROR:カラム "id"のnull値がnullでない制約に違反しています エラーコード:0 呼び出し:INSERT INTO BOOKMARK(CREATEDAT、NAME、COLOR_ID、USER_ID、PAGE_ID)VALUES(? )。 \t bind => [2010-11-27、TestBookmark、1、1、3] Query:InsertObjectQuery(ブックID:22のブックマークIDは、IDが「BlaBook」 1) – LeonS
私のJUnitテストがうまくいっているので、Tomcatに依存しているようです。 Tomcatサーブレットのコンテキストでコードに間違いがありますか? – LeonS
もう1つ奇妙な事実:出力\t \t System.out.println( "以下を含みます:" + em.contains(bookmark));は「Contains:false」であるため、オブジェクトはエンティティマネージャによって管理されていないようです – LeonS