java - hibernate JPA : ignore wrong sql foreign key values

标签 java hibernate jpa spring-data myisam

我有一个项目要维护,这个项目的持久层使用JPAHibernate,它运行在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/

相关文章:

java - @joincolumn 的 Hibernate 默认值

hibernate - hibernate 缓存保存了什么?

java - Java 中的 Hibernate 映射 : org. hibernate.MappingException:实体映射中的重复列

java - Gson 和 CSV 冲突?

Java:来自最受欢迎类别的随机元素

java - 调用 InputSplit 的 getClass() 时来自 Hadoop 的 JobSplitWriter/SerializationFactory 的 NullPointerException

java - LocalDateTime JPA - Java 8

java - 如何在 spring boot 中获得可重现的 Pbkdf2PasswordEncoder 输出?

hibernate - JPQL 中的索引元素访问

java - hibernate/jpa 元模型类不包含所有字段