在给定的数据库中,记录的最后修改日期不存储在记录本身的表中,而是通过使用存储过程从历史记录表中检索。
此存储过程返回一个复合类型。但是,像这样映射最后修改日期不起作用:
@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)
答案 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