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

Raf*_*LDI 3 java myisam hibernate jpa spring-data

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

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

现在的问题是,这些列中的某些列应该是foreignkeys为了正确映射而创建的,但它们不是(因为引擎是MyISAM,并且DBrelational是理论上的),因此其中一些列具有错误的值,例如(负数) -1,0,不存在的已故父母)

@Entity
public class EntityA {

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

}
Run Code Online (Sandbox Code Playgroud)

在数据库中,可能的值为COL_FK0,-1,DEAD PARENTS

我既不能更改数据库结构,也不能编辑列中的数据。我所能做的就是更改代码。

我怎么能告诉Hibernate忽略那些值,而不会RuntimeException仅仅因为它的一个元素包含了一个错误的foreingkey值就抛出一个列表。

谢谢。

更新:

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

}
Run Code Online (Sandbox Code Playgroud)

堆栈跟踪 :

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
Run Code Online (Sandbox Code Playgroud)

JB *_*zet 5

注释您的关联

@NotFound(action=NotFoundAction.IGNORE)
Run Code Online (Sandbox Code Playgroud)

请注意,尽管这已经是一个丑陋的解决方案,但这是又一个hack。Hibernate严重依赖事务(应该如此),而MyISAM,AFIAK不支持事务。我想您已经知道了,但是修复数据库将是一个更好的选择。