【发布时间】:2015-10-29 20:32:09
【问题描述】:
我有一个项目要维护,这个项目的持久层使用JPA和Hibernate,它运行在MySQL服务器上,数据库不是relational,引擎是MyISAM on所有表格。
我的实体上有一些外键关系映射为@ManyToOne 关系。
现在的问题是,其中一些列应该是 foreignkeys 以便正确映射,但它们不是(因为引擎是 MyISAM,而 DB 只是 relational理论上),其中一些列的值是错误的,例如 (负数 -1 , 0 ,不存在的死去的父母)。
@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
【问题讨论】:
-
在抛出
RuntimeException的地方添加一个 try catch 但这对我来说听起来很奇怪,因为此后任何时候如果引用了外来对象,您很可能会遇到NullPointerException -
@j.con 这不是一个选项,这不是 oneElement 的问题,而是整个表格的问题,例如,当您尝试获取元素列表时,您将得到异常并且由于无法映射一个元素,因此无法加载整个列表。
-
你在抓取表格数据时使用
javax.persistence.criteria.CriteriaQuery吗? -
@j.con 我使用
Spring-data-jpa和querydsl有时Specification
标签: java hibernate jpa spring-data myisam