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
}