2010-12-14 41 views
1
@Entity 
public class Master implements Serializable{ 
private List slaves; 
@OneToMany(mappedBy = "Master",fetch=FetchType.LAZY) 
public List getSlaves() { 
    return slaves; 
} 
} 

I want this code to pass. 

List m = createQuery("from Master where id=1").getResultList(); 
for (Master master : m) { 
    assertNull(master.getSlaves()); 
} 

我想getSlaves()返回空值,而不是初始化代理連接到數據庫(這個船長有奴隸,我不想從數據庫中刪除)。休眠斷開代理時取指令= FetchType.LAZY

在Hibernate或JPA中有沒有辦法做到這一點?

當提取是EAGER時,還有這樣做的方法嗎?

回答

0

如果我正確理解你,你想要一個實際上有奴隸的主人無論如何返回一個空值的奴隸列表?這是否在測試環境中?你確定這是你想要的,並且你在正確的軌道上?

另一個醜陋的方法是隻將奴隸列表設置爲null。這將確保getSlaves()返回null,只要你在同一個會話中,但是在數據庫中什麼都不會改變(至少對於休眠)。這種方法也適用於渴望收集。

1

靜默失敗的代理將是一個棘手的事情來調試。

看到休眠代碼後,我不認爲你有選項來配置它。您可以嘗試反射性地調用collection.setInitialized(),以僞集合初始化,但這會很難看。

0

上一個集合不應該返回null。你在代碼中設置一個陷阱,讓它返回null。

而是有它返回一個空集和斷言集爲空

assertTrue(master.getSlaves().size() == 0);