簡體   English   中英

@ManyTo與父類型相同的類型,其中子級在數據庫中不存在

[英]@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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM