2010-09-14 93 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