如何调用从@Formula返回复合类型的存储过程?

时间:2016-02-25 15:46:52

标签: hibernate

在给定的数据库中,记录的最后修改日期不存储在记录本身的表中,而是通过使用存储过程从历史记录表中检索。

此存储过程返回一个复合类型。但是,像这样映射最后修改日期不起作用:

@Formula("(select op_timestamp from get_last_mod('text_header', id))")
private Date lastUpdated;

因为在将其转换为HQL时,Hibernate用_myentity0.op_timestamp替换op_timestamp。将它放入引号也不起作用,给存储的proc结果一个别名(从....作为last选择last.op_timestamp)也有相同的结果。

我能使其工作的唯一方法是为DB中的存储过程创建一个别名,该别名仅返回复合类型的时间戳:

@Formula("get_last_mod_ts('text_header', id)")
private Date lastUpdated;

Hibernate专家,您是否知道使用原始存储过程实现此目的的正确语法? (该项目使用Hibernate 4.2.1)

1 个答案:

答案 0 :(得分:1)

使用功能

@Formula(value = "(SELECT func_last_mod_ts('text_header',id))")

CREATE FUNCTION func_last_mod_ts(@pHEADER VARCHAR(50), @pID INT) 
RETURNS INT 
AS 
BEGIN 
DECLARE @ret INT;
(
    SELECT @ret = 1

) RETURN @ret;
END