Hibernate JPA:忽略错误的 sql 外键值

Hibernate JPA : ignore wrong sql foreign key values

我有一个项目要维护,这个项目的持久层使用JPAHibernate并且在MySQL服务器上是运行,数据库是不是 relational 并且引擎在所有表上都是 MyISAM

我有一些外键关系在我的实体上映射为 @ManyToOne 关系。

现在的问题是,为了正确映射,其中一些列应该是 foreignkeys,但它们不是(因为引擎是 MyISAM,并且 DB 理论上只是 relational),其中一些列有错误的值,例如 (负数 -1 , 0 ,不存在的死 parents).

@Entity
public class EntityA {

   @ManyToOne
   @JoinColumn(name="COL_FK")
   private EntityB b;

}

在数据库中,COL_FK 的可能值为:0,-1,DEAD PARENTS

我既不能更改数据库结构也不能编辑 columns.All里面的数据我能做的就是改代码。

我怎样才能告诉 Hibernate 忽略这些值而不是抛出一个 RuntimeException 当我得到列表只是因为它的一个元素包含错误的 foreingkey 值。

谢谢。

更新:

@Embeddable
public class EntityA {
    @ManyToOne()
    @JoinColumn(name = "idClient")
    @NotFound(action = NotFoundAction.IGNORE)
    private ClientBO idClient;

}

堆栈跟踪:

AVERTISSEMENT: org.springframework.orm.jpa.JpaObjectRetrievalFailureException: Unable to find xx.xxx.xx.xxx.ClientBO with id 210; nested exception is javax.persistence.EntityNotFoundException: Unable to find xx.xx.xx.xxx.ClientBO with id 210

注释您与

的关联
@NotFound(action=NotFoundAction.IGNORE)

请注意,这是在一个已经很丑陋的解决方案之上的又一个 hack。 Hibernate 严重依赖事务(它应该如此)而 MyISAM,AFAIK,不支持事务。我猜你已经知道了,但修复数据库会是一个更好的选择。

改变TABLE ...引擎=InnoDB。

MyISAM 接受 FOREIGN KEYs 的语法,但不实现它们。它还会忽略与交易相关的任何命令(如 COMMIT)。

MyISAM 处理 "relations"。它处理 INDEXesJOINs。它只是不执行 FOREIGN KEYs 提供的额外内容。