JPA:有没有办法返回下一个可用的PK

时间:2011-01-07 16:34:15

标签: java jpa

如果id中的字段Entity是这样的

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;

然后当我persist实体时,会创建一个唯一的随机ID。有没有办法可以在persist

之前检索下一个可用的PK

4 个答案:

答案 0 :(得分:2)

规范中没有,尽管某些实现可能提供一种手段。问题是在某些情况下,数据库是由序列或自动增量生成的。对于JPA而言,确切地知道该怎么做是非常具有挑战性的。

答案 1 :(得分:1)

如果您不知道自己计划使用ID做什么,我发现这个link可能会有所帮助。我会编写一个自定义序列类,只调用超级方法来生成id,然后在你拥有它之后做你需要做的事情。

答案 2 :(得分:1)

在EclipseLink中,你可以这样做,

Number nextId = entityManager.unwrap(Session.class).getNextSequenceNumberValue(MyEntity.class);

答案 3 :(得分:0)

@Harry Pham 请参阅Eclipselink用户指南:

http://wiki.eclipse.org/EclipseLink/UserGuide/JPA/Basic_JPA_Development/Entities/Ids/GeneratedValue

在底部,它说明了詹姆斯已经说过的话。您可以使用以下代码获取下一个序列号值:

long id = em.unwrap(Session.class).getNextSequenceNumberValue(Employee.class).longValue();

Session类位于org.eclipselink.persistence.Sessions包中。

但使用这个是eclipselink专有而不是JPA。