【问题标题】:Spring-Hibernate app works differently in 2 different oracles DBsSpring-Hibernate 应用程序在 2 个不同的 oracle 数据库中的工作方式不同
【发布时间】:2011-11-07 09:35:20
【问题描述】:

我有一个 spring-hibernate 应用程序并面临一个奇怪的问题。我有 2 个相同应用程序的独立实例连接到两个不同的 Oracle 数据库。我有一个函数,它使用休眠的 saveOrUpdate() 方法来更新数据库中的对象。该实体的主键也是表数的外键。

问题是当我们更新这个实体的对象时,这个对象在其他表中的所有外部引用在一个数据库中都被取消了,尽管在其他数据库中一切正常。因此,我们在数据库中有很多空外键。我无法弄清楚为什么会发生这种情况,以及对于一个 db 到底需要做什么,一切似乎都运行良好。请帮忙。

【问题讨论】:

  • 您是否比较了这两种模式?其中之一是否为外键定义级联规则?
  • 我使用 cascadeType.ALL 作为所有外键引用。
  • 我的意思是 on delete 定义 FK 的规则,例如 on delete cascadeon delete set null
  • 不,我没有定义任何这样的规则。
  • 你能分享你的hbm文件吗?

标签: oracle hibernate


【解决方案1】:

我建议你先在oracle数据库的其他表中添加外键约束。因此,每当任何进程试图使外键无效时,该进程都会失败。现在这种失败的好处是,您将能够准确地跟踪问题发生的位置。

如果 hibernate 弄乱了数据(理想情况下不应如此),那么异常跟踪将在跟踪中显示 hibernate 类,否则如果某些数据库触发器或数据库中的其他东西导致问题,那么您将在异常中获得 SQL 错误代码堆栈跟踪。

所以请试试这个,让我们知道你发现了什么。也许你会在那里得到答案。

【讨论】:

    猜你喜欢
    • 2012-12-02
    • 1970-01-01
    • 2020-11-01
    • 1970-01-01
    • 2018-12-10
    • 1970-01-01
    • 1970-01-01
    • 2014-10-06
    • 2015-03-04
    相关资源
    最近更新 更多