我在持久化实体并在持久化发生后获取 id 时遇到了问题。 我可以看到数据是在数据库中创建的,具有正确的 id,但对象处的 id 仍然为 null。
这是我的实体:
@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() 结果为空。 我怎样才能避免这种情况?
最佳答案
我解决了这个问题。问题的根源在于保留书签的命令顺序。 这是正确的顺序:
em.persist(bookmark);
em.merge(currentUser);
因此,首先您必须保留实体,然后您可以合并该实体的关系实体。
关于orm - Eclipselink - 坚持后的ID仍然为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4286481/