Oracle Hibernate 3,addScalar(),用户类型[Types.BIGINT,Types.VARCHAR]2列

Oracle Hibernate 3,addScalar(),用户类型[Types.BIGINT,Types.VARCHAR]2列,oracle,hibernate,Oracle,Hibernate,我有一个信用卡域名: class CreditCard { Long Id Price value ... static mapping = { value type: PriceType,{ column name: "VALUE_AMOUNT" column name: "VALUE_CURRENCY" } } 我想创建一个报告,因此我创建了我的自定义类型: Type priceTypeLocator

我有一个信用卡域名:

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)
以及查询:

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();

如何将这两个值(VALUE\u AMOUNT和VALUE\u CURRENCY)与信用卡域中的VALUE字段绑定?

您可以使用以下方法:

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"))

我最终决定使用标准类型和设置器:

 .addScalar('requestedAmountAmo', StandardBasicTypes.BIG_DECIMAL)
 .addScalar('requestedAmountCur', StandardBasicTypes.STRING)
然后我设定了价格:

 void setRequestedAmountAmo(BigDecimal requestedAmountAmo) {
    requestedAmount = new Price(amount:requestedAmountAmo, currency: '')
}

void setRequestedAmountCur(String requestedAmountCur) {
    requestedAmount.currency = requestedAmountCur
}