4

使用休眠 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 

我想将 a @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,希望使用in创建一个DateOptions对象。ResultSetnullSafeGet(...)

我在我的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过相同的结果)。

知道可能导致问题的原因吗?是否有可能(将 a 映射@Formula到自定义非实体对象)?

4

1 回答 1

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;
于 2012-09-14T08:30:04.977 回答