2010-09-14 64 views
2

我有一個PROPERTY表,其主鍵被定義爲(REF_1_ID, PROPERTY_ID, PROPERTY_IDX),其中PROPERTY_IDX範圍從0到n,對於相同的值(REF_1_ID, PROPERTY_ID)在休眠狀態下映射組合鍵和增量列

我想讓它休眠以管理PROPERTY_IDX的值,以便我可以將它設置爲null以獲取新對象並在保存時填充它。

實現該目標的最簡單方法是什麼?

+0

:你使用其他實體級聯能夠保存其套裝屬性實體,或者你保存一個普通的屬性(如保存(屬性)) – 2010-09-14 13:48:01

+0

@Arthur:我只是使用普通的'save()' – 2010-09-14 14:00:00

回答

1

對於(REF_1_ID,PROPERTY_ID)

您可以用相同的(REF_1_ID,PROPERTY_ID)檢索多少房產實體,你有

Integer indexValue = (Integer) 

session.createQuery("select count(*) from Property p where p.propertyId.rederenceId = :referenceId and p.propertyId.propertyId = :propertyId") 
     .setParameter("referenceId", referenceId) 
     .setParameter("propertyId", propertyId) 
     .iterate() 
     .next(); 

然後你設置的值相同

propertyId.setIndexValue(indexValue); 

您可以使用HibernateInterceptor來實現這種功能與這種情況下

或者封裝處理時,請注意併發問題(的onSave方法)保持如下只是出於好奇

@IdClass(PropertyId.class) 
public class Property { 

    private Integer referenceId; 
    private Integer propertyId; 
    private Integer indexValue; 

    /** 
     * You can use some repository instead 
     * 
     * setUp by using Either constructor Or setter injection 
     */ 
    private Session session; 

    public Property() {} 
    public Property(Session session) { 
     this.session = session; 
    } 

    @Id 
    public Integer getIndexValue() { 
     if(indexValue != null) 
      return indexValue; 

     return (Integer) 

      session.createQuery("select count(*) from Property p where p.propertyId.rederenceId = :referenceId and p.propertyId.propertyId = :propertyId") 
        .setParameter("referenceId", referenceId) 
        .setParameter("propertyId", propertyId) 
        .iterate() 
        .next(); 
    } 

} 
+0

希望我能找到更簡單的東西,但這似乎是唯一的方法。謝謝! – 2010-09-16 06:52:23