处理旧数据库时,休眠会阻塞丢失的行

2022-09-04 02:17:10

我正在尝试在旧数据库(仍然有一个遗留的PHP客户端)上实现休眠,并且遇到了一些问题,因为编写原始应用程序的人不知道他们在做什么。

数据库的设置使得任何列都不为 null,因此,如果没有记录,则这些列的默认外键为 0。此外,它们在表上没有正确的外键,因此有一些具有无效的ID。我没有更改架构或为相应列空的选项。

这是我从休眠状态得到的错误:

Caused by: org.hibernate.ObjectNotFoundException: No row with the given identifier exists: [com.tv.platform.domain.Program#0]

我想要的是一种处理这种泥泞的优雅方式,如果行无效或不存在,则该字段将仅为空,但是我没有任何运气找到如何在文档中处理此问题。

有什么提示吗?


答案 1

注释:@NotFound( action = NotFoundAction.IGNORE )

完全符合我的需求。我通过这里找到了它:

休眠多对一外键缺省值 0


答案 2

我不认为Hibernate适合这种类型的问题。Hibernate 期望表中的记录彼此相关,如果只是有时强制执行外键关系,则实际上无法正常工作。我无法想象更改或配置Hibernate以这种方式行事会很容易 - 知道如何处理损坏的外键关系。

您可以从像MyBatis SQLMaps这样的框架中获得更多的里程,在该框架中,您提供SQL语句以将数据加载到程序外部的文件中,但是该框架提供了将语句链接在一起以加载完整对象图的选项。这样,您可以使用逻辑来补充 SQL 语句以筛选出值。SELECT0


推荐