2017-10-02 7 views
0

は私がのCreditCardドメインがあります。Hibernateは3、addScalar()、のUserType [Types.BIGINT、のTypes.VARCHAR] 2つのcolums

class CreditCard { 

Long Id 
Price value 
... 

static mapping = { 
     value type: PriceType,{ 
      column name: "VALUE_AMOUNT" 
      column name: "VALUE_CURRENCY" 
     } 
} 

は私がレポートを作成したいが、私は私のカスタムタイプを作成します。

Type priceTypeLocator = new TypeLocatorImpl(new TypeResolver()).custom(PriceType) 

とクエリ:のCreditCardドメイン内の値フィールドでこれら2つの値(VALUE_AMOUNTとVALUE_CURRENCY)をバインドする方法

def result = getSession().createSQLQuery("select ID, VALUE_AMOUNT, VALUE_CURRENCY from CreditCard") 
.addScalar("ID", StandardBasicTypes.LONG) 
.addScalar("VALUE_AMOUNT",priceTypeLocator) //this wont work 
.addScalar("VALUE_CURRENCY",priceTypeLocator) //this wont work 
.setResultTransformer(Transformers.aliasToBean(CreditCard.class)) 
.list(); 

あなたがこの方法で使用することができ

答えて

0

public static Type getPropertyType(Session session, Class entityClass, String propertyName) { 
    return session.getSessionFactory().getClassMetadata(entityClass).getPropertyType(propertyName); 
} 

そして、このようにそれを使用します。

.addScalar("VALUE_AMOUNT", getPropertyType(session, CreditCard.class, "value_amount_poperty_name")) 
関連する問題