Java Hibernate UserType将@Formula结果映射到非实体自定义对象
使用Hibernate 3.5.3: 数据库中有一个函数(使用Oracle的管道表函数),在提供实体ID时,该函数返回许多行和值。(此函数是无法更改的旧代码的一部分) 结果示例:Java Hibernate UserType将@Formula结果映射到非实体自定义对象,java,oracle,hibernate,hibernate-mapping,Java,Oracle,Hibernate,Hibernate Mapping,使用Hibernate 3.5.3: 数据库中有一个函数(使用Oracle的管道表函数),在提供实体ID时,该函数返回许多行和值。(此函数是无法更改的旧代码的一部分) 结果示例: select * from table(DateOptions_Function('ID_OF_ENTITY')); OPTION DATE ----------------------- startDate 2012/09/01 endDate 2013/04/01
select * from table(DateOptions_Function('ID_OF_ENTITY'));
OPTION DATE
-----------------------
startDate 2012/09/01
endDate 2013/04/01
otherDate 2011/01/01
我想将@公式(包含上述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;
}
我曾尝试创建一个HibernateUserType
,希望使用nullSafeGet(…)
中的ResultSet
创建一个DateOptions
对象
我在myDateOptions用户类型中指定sql类型
public int[] sqlTypes() {
return new int[] {Types.VARCHAR, Types.DATE};
}
不过,我在启动时一直遇到以下异常:
org.hibernate.MappingException:属性映射的列数错误:mypackage.MyEnity.dateOptions类型:mypackage.dateOptions用户类型
(我也尝试了CompositeUserType
,结果相同)
知道是什么导致了这个问题吗?甚至有可能(将@Formula
映射到自定义非实体对象)吗?因为基本上有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;