Bat*_*ard 6 java hibernate foreign-keys second-level-cache
我们的Java应用程序有大约100个映射到数据库(SQL Server或MySQL)的类.我们使用Hibernate作为我们的ORM(使用XML映射文件).
我们FOREIGN KEY在数据库模式中指定约束.我们的大多数FOREIGN KEY约束也都指明了ON DELETE CASCADE.
我们最近开始启用Hibernate二级缓存(针对流行的实体和集合)来缓解一些性能问题.
自从我们启用了二级缓存后,性能得到了提升.但是我们也开始遇到ObjectNotFoundExceptions.
似乎发生了ObjectNotFoundExceptions,因为数据库正在删除Hibernate 下面的表行.例如,当我们Parent使用Hibernate 删除a 时,数据库模式将ON DELETE CASCADE发送给任何Child实体.这显然没有Hibernates知识,所以它没有机会更新二级缓存(并删除任何已删除的Child实体).
我们相信这个问题的解决方案是ON DELETE CASCADE从我们的数据库模式中删除(但保留FOREIGN KEYs).相反,我们需要配置Hibernate来删除Child正常删除SQL的依赖关系,这也将使Hibernate更新二级缓存.一些有限的测试表明这种方法似乎有效.
我想得到一些社区反馈.我们的问题是否有其他(更好的?)解决方案?其他人如何处理这种情况?通常,在使用ON DELETE CASCADEHibernate的数据库模式中应该考虑哪些权衡?
谢谢.
如果您总是要通过程序进行删除,则需要取消数据库的约束,并告诉 hibernate 对象 ON DELETE CASCADE 来处理相关的事情。
另一方面,如果您有时要在 Java 应用程序中删除对象,有时要在数据库级别删除对象,那么您最终会得到奇怪的挂起数据。在这种情况下,您可能需要研究更复杂的方法。您不清楚是否是这种情况,因此这里不打算详细介绍。
| 归档时间: |
|
| 查看次数: |
2178 次 |
| 最近记录: |