据我所知,不可能调用存储过程mysql
与JPA
写入,但常见函数(mysql)是什么?是否可以通过JPA(JAVA)调用存储的函数?
如何使用JPA调用存储的mysql函数?
也许与EntityManager
方法createNativeQuery
?
(尝试做出了榜样)
据我所知,不可能调用存储过程mysql
与JPA
写入,但常见函数(mysql)是什么?是否可以通过JPA(JAVA)调用存储的函数?
如何使用JPA调用存储的mysql函数?
也许与EntityManager
方法createNativeQuery
?
(尝试做出了榜样)
据我所知,这是不可能调用写在mysql中使用JPA存储过程
号你可以叫存储过程来自JPA。有关如何操作的示例,请参见here。
如何使用JPA调用存储的mysql函数?
您可以从JPA调用MySQL存储函数。 JPA 2.1引入了FUNCTION()函数来调用任何预定义的函数(如CONCAT,SUBSTRING)或用户定义的函数。
说,例如,你定义你自己的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();
我找到了类似的解决方案。我只是使用“nativeQuery”。然而,我可以这样做:entityManager.find(Employee.class,FUNCTION('LAST_INSERT_ID()'));但这不起作用;( – EchoCache
不,你不能这样做,请阅读[EntityManager#find]的文档(http://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#find-java .lang.Class-java.lang.Object-)方法,它需要一个Object(具有标识符值的Java对象)而不是JPQL表达式。另一方面,您不能拥有像JPQL表达式那样的'FUNCTION('LAST_INSERT_ID() '),因为它不是为JPQL定义的有效语法 – Bunti
如果你在'LAST_INSERT_ID'中有一些复杂的逻辑,而不是只返回最后插入的id,你必须使用[Entitymanager#createNativeQuery](http://docs.oracle.com) .com/javaee/7/api/javax/persistence/EntityManager.html#createNativeQuery-java.lang.String-java.lang.Class-)或其重载之一来调用存储函数。 – Bunti
肯定。你可以使用'JPA'调用过程... –
也许你应该阅读JPA 2.1。有在互联网上的许多文件,以及如何调用StoredProcedure –
请参阅此>> http://www.thoughts-on-java.org/call-stored-procedures-jpa/ –