JPA中,在调用persist()时,数据库自动增长的主键如何处理
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JPA中,在调用persist()时,数据库自动增长的主键如何处理相关的知识,希望对你有一定的参考价值。
比如有一张表account是 id, username, password.其中id是数据库自增长主键。
创建了一个account对象a,字段username和password自己赋值,那么em.persist(a)时,会报错。因为我没有给id..但id是数据库自增长的,我应该怎么处理啊?
初学者,恳请指教。
persist在事务外执行的话,不会执行insert语句
你用的什么数据库,oracle?追问
mysql 我加了事务处理了
追答如果你id在数据库中已经使用了 自增列 的话
在你的代码上添加
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
public Integer getId()
return id;
还是不行啊。。有一个exception叫 illegalArgumentException:id to load is required for loading
追答试一下:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
最好把你的实体类和em.persist(a)整个方法都发出来
能给一些代码示例么?大概写几行就好了。谢谢啊
参考技术B @GeneratedValue这个默认的id生成策略是自增的。
你在你的实体类中标记了么?类似于下面的?
private Integer id;
private String name;
private Catalog parent;
private Set<Catalog> childs;
@Id
@Column(name="id",unique=true,nullable=false,insertable=true)
@GeneratedValue
public Integer getId()
return id;
追问
没有。。我试试
jpa遇到的 org.hibernate.PersistentObjectException: detached entity passed to persist异常
jpa遇到的 org.hibernate.PersistentObjectException: detached entity passed to persist异常
发生这个原因是因为我们已经在实体类用JPA注解指定了主键的生成策略主键就不能设置了,一旦不为空或者0就被认为是已经保存到了数据库中,一旦调用persist()方法就会抛出上面的异常
把0去掉,如下图:
以上是关于JPA中,在调用persist()时,数据库自动增长的主键如何处理的主要内容,如果未能解决你的问题,请参考以下文章
jpa遇到的 org.hibernate.PersistentObjectException: detached entity passed to persist异常
合并有时在 JPA Hibernate 中失败,但在同一事务中 PERSIST 有效
JPA 和 Hibernate 中的 persist() 和 merge() 有啥区别?