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

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

因此,首先您必须保留实体,然后您可以合并该实体的关系实体。

https://stackoverflow.com/questions/4286481/

相关文章:

ejabberd - 如何阻止 ejabberd 使用 mnesia

database - 在数据库中存储图像名称和扩展名?

mfc - CString 总是以 null 结尾吗?

vi - 如何利用 "vi -t"查找系统调用的源码? FreeBSD

python - 为每个类别选择一个项目的查询语法

oracle - 时间表和 `max_failures` 属性

file - 如果文件长度相同,哈希冲突的可能性有多大?

PHP - 如何将页面标题添加到 URL?以及如何使用 PHP 创建干净的 url

c# - 尝试通过 WMI 获取 CPU ID 时生成 "Not found"异常

vba - Outlook:添加或更新日历条目时运行代码?