2012-03-27 31 views
0

我在DB中的下列設置來表示這裏在樣品HIB類如何從遞歸加載實體

類A {
私人B B休眠停止; }

B類{
private C c; }

C類{
private D d; }

示例HQL:from A a left join a.b;

這遞歸地加載所有實體從A到D.如何選擇性地加載實體說在這種情況下,我會希望它加載到B?

回答

0

如果你正在使用映射文件,你可以告訴hibernate延遲加載實體。 這種方式實體將不會被加載,除非你訪問該屬性。 下面是如何設置實體的延遲加載的示例。 A和B類總是被加載,但其餘的只有在你嘗試並訪問它們的屬性後才被加載。

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="TestNamespace.A, TestNamespace" table="A" lazy="false" /> 
    <many-to-one name="B" column="B" /> 
</hibernate-mapping> 

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="TestNamespace.B, TestNamespace" table="B" lazy="false" /> 
    <many-to-one name="C" column="C" /> 
</hibernate-mapping> 

<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="TestNamespace.C, TestNamespace" table="C" lazy="true" /> 
    <many-to-one name="D" column="D" /> 
</hibernate-mapping> 


<?xml version="1.0" encoding="utf-8" ?> 
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"> 
    <class name="TestNamespace.D, TestNamespace" table="D" lazy="true" /> 
    <property name="SomeProperty" column="SomeColumn" /> 
</hibernate-mapping> 

祝您好運

+0

的有沒有辦法來延遲加載一對一的實體? – Sudhakar 2012-03-28 08:12:03

+1

據我所知,這不被Hibernate支持,我看到一篇關於類似的文章,有一個解決方法。看到這篇文章http://stackoverflow.com/questions/965059/how-to-lazy-load-a-one-to-one-composition-via-hql – Falle1234 2012-03-29 09:18:09