当前位置:  开发笔记 > 编程语言 > 正文

org.hibernate.exception.ConstraintViolationException:无法执行语句

如何解决《org.hibernate.exception.ConstraintViolationException:无法执行语句》经验,为你挑选了1个好方法。



1> Madhusudana ..:

在您的情况下,您已将OneToMany作为company_id的拥有方。即,公司类别是所有者。

在这种情况下,插入一个应用程序记录将导致两次查询,一次插入和一次更新。首先是insert语句,该语句在没有company_id的情况下执行对App表的插入(因为这不是所有者),然后触发更新查询来更新company_id。因此,要使第一个插入语句成功,它要求company_id为数据库中的空字段。否则将抛出ConstraintViolationException。

如果将ManyToOne作为拥有方,那么它将在App表中生成单个insert语句。因此,在这种情况下,company_id字段可以为null。

因此,我看到两个选择:

    将company_id设置为数据库中的空字段。

    使ManyToOne作为拥有者。

以下输出有助于理解以上陈述。我有森林类,它与树类具有OneToMany关系。

拥有多对一的所有权

Hibernate: values identity_val_local()
Hibernate: insert into Tree (id, "COUNT", FOREST, name, version) values (default, ?, ?, ?, ?)

一对多的所有权

Hibernate: insert into Tree (id, "COUNT", name, version) values (default, ?, ?, ?)
Hibernate: values identity_val_local()
Hibernate: update Tree set FOREST=?, index=? where id=?

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有