orm - Eclipselink - 坚持后的ID仍然为空

标签 orm jpa entity nullpointerexception eclipselink

我在持久化实体并在持久化发生后获取 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/

相关文章:

Hibernate 更新我的实体

iphone - 更新核心数据实体

.net - 每个 System.ComponentModel.DataAnnotations 属性的用途是什么?

java - 持久化对象时分离实体异常

symfony - 在 Symfony 2.7.3 中从数据库中获取对象

asp.net - Entity Framework 对于 Web 应用程序来说是大材小用吗?

.NET ORM - NHibernate(或 SubSonic 或其他)与使用 Entity Framework 相比有什么优势?

java - 删除父级时获取所有已删除实体的 ID?

Laravel - 第三方 API 的模型?

mysql - Hibernate:ORDER BY 子句中的 OR