[英]@ManyToOne of the same type as parent where child doesn't exist in DB
我使用Spring Roo對MySQL數據庫進行反向工程,該數據庫只有我具有讀取權限。
其中一個名為Transaction的實體具有一個稱為originalTransaction的字段,在數據庫中將其設置為可以為null,但默認值為0。
@RooJavaBean
@RooToString
@SuppressWarnings("serial")
@RooDbManaged(automaticallyDelete = true)
@RooJpaActiveRecord(versionField = "", table = "TRANSACTIONS")
public class Transaction implements Serializable {
....
@Fetch(value = FetchMode.SELECT)
@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name = "ORIG_TRANS_ID")
private Transaction originalTransaction;
....
}
我添加了FetchMode.Select和FetchType.Lazy作為其他問題的解決方法。
現在,當我插入一個事務並且將originalTransaction保留為空時,數據庫會將其更改為0。
當我執行一個entity()。find(12345678)時,出現以下錯誤:
Unable to find Transaction with id 0
javax.persistence.EntityNotFoundException: Unable to find Transaction with id 0
at org.hibernate.ejb.Ejb3Configuration$Ejb3EntityNotFoundDelegate.handleEntityNotFound(Ejb3Configuration.java:157)
at org.hibernate.proxy.AbstractLazyInitializer.checkTargetState(AbstractLazyInitializer.java:261)
at org.hibernate.proxy.AbstractLazyInitializer.initialize(AbstractLazyInitializer.java:175)
at org.hibernate.proxy.AbstractLazyInitializer.getImplementation(AbstractLazyInitializer.java:285)
因此很明顯(最初並不那么明顯),它正在嘗試查找originalTransaction,並且由於數據庫將null更改為0,因此它正在嘗試查找id = 0的Transaction不存在-這導致entity.find(12345678 ),即使事務在數據庫中也返回null。
如果數據庫中的originalTransaction的ID不存在,是否有任何解決方法可以阻止Hibernate / JPA停止搜索並返回null? 如果不存在,我最好將其強制為null。
如果您使用休眠模式,可以嘗試
@NotFound(action = NotFoundAction.IGNORE)
否則,您必須清理數據庫(0不為null
)。 如果沒有父母,則ORIG_TRANS_ID
應該為null
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.