gpt4 book ai didi

java - Hibernate ConstraintViolationException : could not insert, SQL 错误

转载 作者:行者123 更新时间:2023-12-01 15:46:47 25 4
gpt4 key购买 nike

我有一个脚本查询我的 jboss 服务器,这会导致保存新的 hibernate 对象。我正在创建 model1 和 model2,在 model1 上调用 create 并让cascade="save-update"处理 model2。然而,这种方法有时会导致 model2 中的主键约束失败,在这种情况下,hibernate 就会崩溃。有人知道我该如何解决这个问题吗?

这是我的映射以及我遇到的错误。由于错误仅在某些时候发生(并且输入的数据都是完全唯一的),我怀疑在 session 完全提交之前 jboss 返回可能存在问题,然后要添加的下一个数据开始并获取 ID不应该。或者对此事有什么想法吗?

模型1.hbm.xml

<hibernate-mapping default-cascade="none">
<class name="Model1Impl" table="MODEL1" dynamic-insert="false" dynamic-update="false">
<cache usage="read-write" />
<id name="id" type="java.lang.Long" unsaved-value="null">
<column name="ID" sql-type="NUMBER(19)"/>
<generator class="native">
</generator>
</id>
...
<many-to-one name="Model2" class="Model2Impl" foreign-key="MODEL1_MODEL2_FKC" cascade="save-update" lazy="false" fetch="select">
<column name="MODEL2_FK" not-null="false" sql-type="NUMBER(19)" unique="true"/>
...
</class>
</hibernate-mapping>

Model2.hbm.xml

<hibernate-mapping default-cascade="none">
<class name="Model2Impl" table="MODEL2" dynamic-insert="false" dynamic-update="false">
<cache usage="read-write" />
<id name="id" type="java.lang.Long" unsaved-value="null">
<column name="ID" sql-type="NUMBER(19)"/>
<generator class="native">
</generator>
</id>
...
<one-to-one name="Model1" class=Model1Impl" property-ref="Model2" cascade="none" lazy="proxy" fetch="select"/>
</class>
</hibernate-mapping>

错误

13:42:15,734 ERROR [JDBCExceptionReporter] ORA-00001: unique constraint (DBSERVER.SYS_C005810470) violated

13:42:15,734 ERROR [AbstractFlushingEventListener] Could not synchronize database state with session
org.hibernate.exception.ConstraintViolationException: could not insert: [Model1Impl]
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:94)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:66)
...

Caused by: java.sql.SQLException: ORA-00001: unique constraint (DBSERVER.SYS_C005810470) violated
at oracle.jdbc.dbaccess.DBError.throwSqlException(DBError.java:134)
at oracle.jdbc.ttc7.TTIoer.processError(TTIoer.java:289)
at oracle.jdbc.ttc7.Oall7.receive(Oall7.java:582)
at oracle.jdbc.ttc7.TTC7Protocol.doOall7(TTC7Protocol.java:1986)
at oracle.jdbc.ttc7.TTC7Protocol.parseExecuteFetch(TTC7Protocol.java:1144)
at oracle.jdbc.driver.OracleStatement.executeNonQuery(OracleStatement.java:2152)

非常感谢!

最佳答案

事实证明,这个错误(正如“无法同步数据库” 所显示的那样)是一个数据库问题。

结果我的一个序列被重置了(还不知道是怎么重置的)并且各种主键都发生了冲突。为了解决这个问题,我将数据库序列提高到高于我的最高 ID。感谢您的想法,我希望这对遇到类似情况的人有所帮助!

关于java - Hibernate ConstraintViolationException : could not insert, SQL 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6918709/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com