【发布时间】:2013-07-25 06:44:45
【问题描述】:
如何获取保存到数据库后的值
entityManager.persist
调用persist而不是任何其他值后,我能够从数据库中获取主键值。 例如
public void create(Project project) {
entityManager.persist(project);
System.out.println("Id -- " + project.getProjectId());
System.out.println("no -- " + project.getProjectNo());
}
从上面的代码中,我能够从project.getProjectId 中获取新插入的值,但无法获取project.getProjectNo
我之所以能够得到projectId是因为它是主键吗?
persist后如何获取getProjectNo的值?
【问题讨论】:
-
ProjectNo 是生成值吗?你确定它是在调用之前设置的吗?值是否出现在数据库中?如果它没有生成并且您设置了值,则 orm 不应将该字段设为空。
-
@KevinBowersox
projectNo是使用数据库触发器生成的数据库值。 -
您需要设置一个序列生成器。它可能与身份一起使用,因为这假设数据库将像您的触发器一样在插入中设置 id。
-
@Chris 你的意思是说 projectNo 不是唯一键,而 projectId 是 id 并且被触发是从数据库中取回值?
-
不,我是说 JPA 无法获取触发器设置的值,除非您告诉它该值是由数据库在插入时设置的。这样做的方法是指定使用排序,特别是 GenerationType.IDENTITY。这将告诉 JPA 数据库正在设置该值,因此它可以使用数据库的特定方式查找它。见en.wikibooks.org/wiki/Java_Persistence/…
标签: java hibernate jpa jpa-2.0