是否可以通过JPA(JAVA)调用存储的函数?

时间:2016-05-12 11:25:21

标签: java mysql sql jpa

据我所知,用mysql调用JPA中编写的存储过程是不可能的,但是常见函数(mysql)是什么?

如何使用JPA调用存储的mysql函数?

也许使用EntityManager方法createNativeQuery

(试着举个例子)

1 个答案:

答案 0 :(得分:1)

  

据我所知,用JPA

调用mysql编写的存储过程是不可能的

没有。您可以从JPA调用存储过程。有关如何操作的示例,请参阅here

  

如何使用JPA调用存储的mysql函数?

您可以从JPA调用 MySQL存储函数。 JPA 2.1引入了FUNCTION()函数来调用任何预定义的(例如CONCATSUBSTRING)或用户定义的函数。

比如说,您已经定义了自己的MySQL函数,例如shouldGetBonus

CREATE FUNCTION shouldGetBonus (INT department_id, INT project_id) 
RETURNS boolean
DETERMINISTIC
BEGIN 
  DECLARE is_eligible boolean;
  SET is_eligible = -- eligible to get bonus
  RETURN is_eligible;
END$$

然后在JPQL查询中指定您的函数,例如

String query = "SELECT DISTINCT e FROM Employee e JOIN e.projects p WHERE FUNCTION('shouldGetBonus', e.department.id, p.id)"
TypedQuery<Employee> emps = entityManager.createQuery(query, Employee.class);
emps.getResultList();