我有一个项目要维护,这个项目的持久层使用JPA
和Hibernate
,它运行在MySQL
服务器上,数据库不是关系
,所有表上的引擎都是MyISAM
。
我有一些外键关系在我的实体上映射为 @ManyToOne
关系。
现在的问题是其中一些列应该是外键
以便正确映射,但它们不是(因为引擎是MyISAM
,并且 DB
理论上只是 relational
),其中一些列有错误的值,例如 (负数 -1 , 0 ,不存在的已故 parent ).
@Entity
public class EntityA {
@ManyToOne
@JoinColumn(name="COL_FK")
private EntityB b;
}
在数据库中,COL_FK
的可能值为:0,-1,DEAD PARENTS
我既不能改变数据库结构也不能编辑 列中的数据。我所能做的就是更改代码。
我怎样才能告诉 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,不支持事务。我想您已经知道了,但修复数据库会是一个更好的选择。
关于java - hibernate JPA : ignore wrong sql foreign key values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31860063/