首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Hibernate ConstraintViolationException:无法插入,SQL错误

Hibernate ConstraintViolationException:无法插入,SQL错误
EN

Stack Overflow用户
提问于 2011-08-02 21:15:17
回答 2查看 9.2K关注 0票数 0

我有一个脚本来查询我的jboss服务器,这会导致新的hibernate对象被保存。我正在创建model1和model2,调用create on model1,让cascade=“保存-更新”来处理model2。但是,这种方法会导致model2 中的主键约束失败(有时是),在这种情况下hibernate会崩溃。有人知道我该怎么解决这个问题吗?

这是我的地图,还有我得到的错误。由于错误只是在某些时候才发生(而且输入的数据完全是唯一的),我怀疑在会话完全提交之前jboss返回时可能有问题,然后要添加的下一个数据启动并获得它不应该得到的ID。或者对这件事有什么想法?

Model1.hbm.xml

代码语言:javascript
复制
<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

代码语言:javascript
复制
<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>

错误

代码语言:javascript
复制
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)

非常感谢!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-03 23:10:14

事实证明,这个错误,正如应该看到的那样,“无法同步数据库”,是一个数据库问题。

结果我的一个序列被重置了(还不确定是怎么回事),所有的主键都在碰撞。为了解决这个问题,我将我的数据库序列提高到高于我的最高ID。谢谢你的想法,我希望这能帮助那些处于类似情况的人!

票数 1
EN

Stack Overflow用户

发布于 2011-08-02 21:26:46

在Model1上是否有多行指向Model2上的同一行?您的MODEL1_MODEL2_FKC列被声明为唯一的,这将防止这种情况发生。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6918709

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档