我有一個PROPERTY
表,其主鍵被定義爲(REF_1_ID, PROPERTY_ID, PROPERTY_IDX)
,其中PROPERTY_IDX
範圍從0到n,對於相同的值(REF_1_ID, PROPERTY_ID)
。在休眠狀態下映射組合鍵和增量列
我想讓它休眠以管理PROPERTY_IDX
的值,以便我可以將它設置爲null
以獲取新對象並在保存時填充它。
實現該目標的最簡單方法是什麼?
我有一個PROPERTY
表,其主鍵被定義爲(REF_1_ID, PROPERTY_ID, PROPERTY_IDX)
,其中PROPERTY_IDX
範圍從0到n,對於相同的值(REF_1_ID, PROPERTY_ID)
。在休眠狀態下映射組合鍵和增量列
我想讓它休眠以管理PROPERTY_IDX
的值,以便我可以將它設置爲null
以獲取新對象並在保存時填充它。
實現該目標的最簡單方法是什麼?
對於(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();
}
}
希望我能找到更簡單的東西,但這似乎是唯一的方法。謝謝! – 2010-09-16 06:52:23
:你使用其他實體級聯能夠保存其套裝屬性實體,或者你保存一個普通的屬性(如保存(屬性)) – 2010-09-14 13:48:01
@Arthur:我只是使用普通的'save()' – 2010-09-14 14:00:00