SQL Literal in JPA Hibernate Formula using TIMESTAMPDIFF [duplicate]

梦想与她 提交于 2019-12-07 22:17:14

问题


For a JPA entity with a pseudo column defined using @Formula:

@Formula("TIMESTAMPDIFF(SECOND, dateColA, dateColB)")
private Long duration;

Here SECOND is expected to be treated as a constant literal (with MySQL), however, in the generated JPQL, it is treated as a column name, just like dateColA and dateColB, like:

where ... TIMESTAMPDIFF(entity_.SECOND, entity_.dateColA, entity_.dateColB) ...

I wonder how to get the JPQL generated correctly for the SECOND literal?

Thanks


回答1:


Encapsulate the TIMESTAMPDIFF(SECOND, dateColA, dateColB) in a mysql function

this in Java code:

@Formula("second_diff(dateColA, dateColB)")
private Long duration;

this to create the function:

DELIMITER $$
CREATE DEFINER=`root`@`localhost` FUNCTION `second_diff`( dateColA date, dateColB date ) RETURNS int(11)
BEGIN
   DECLARE diff INT;
   SET diff =  TIMESTAMPDIFF(SECOND, dateColA, dateColB);
   RETURN diff;
END$$
DELIMITER ;


来源:https://stackoverflow.com/questions/26468245/sql-literal-in-jpa-hibernate-formula-using-timestampdiff

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!