使用Hibernate 3.5.3:
在数据库中是一个函数(使用Oracle的流水线表函数),它在提供实体的ID时返回许多行和值。 (此功能是遗留代码的一部分,无法更改)。
结果示例:
select * from table(DateOptions_Function('ID_OF_ENTITY'));
OPTION DATE
-----------------------
startDate 2012/09/01
endDate 2013/04/01
otherDate 2011/01/01
我想将@Formula
(包含上述SQL)的结果映射到实体上的对象。
public class DateOptions {
private LocalDate startDate;
private LocalDate endDate;
private LocalDate otherDate;
// getters and setters omitted
}
我想在实体中映射它:
@Formula("(select * from table(DateOptions_Function(ENTITY_ID)))")
@Type(type = "mypackage.DateOptionsUserType")
public DateOptions getDateOptions() {
return dateOptions;
}
我尝试创建一个Hibernate UserType
,希望使用DateOptions
中的ResultSet
创建一个nullSafeGet(...)
对象。
我在DateOptionsUserType
public int[] sqlTypes() {
return new int[] {Types.VARCHAR, Types.DATE};
}
我在启动时仍然遇到以下异常:
org.hibernate.MappingException: property mapping has wrong number of columns: mypackage.MyEnity.dateOptions type: mypackage.DateOptionsUserType
(我也尝试了CompositeUserType
,结果相同)。
知道可能导致问题的原因是什么?它是否可能(将@Formula
映射到自定义非实体对象)?
答案 0 :(得分:0)
因为你基本上有3个带有公式的字段,我会看到执行3次这个功能的速度是否足够快
@Formula("(select DATE from table(DateOptions_Function(ENTITY_ID))) WHERE option='startDate'")
private LocalDate startDate;
@Formula("(select DATE from table(DateOptions_Function(ENTITY_ID))) WHERE option='endDate'")
private LocalDate endDate;
@Formula("(select DATE from table(DateOptions_Function(ENTITY_ID))) WHERE option='otherDate'")
private LocalDate otherDate;