我正在使用JPQL选择来访问Oracle DB函数: select FUNCTION('function_name', 'foo', 1234) from com_mycompany_bar obj
select FUNCTION('function_name', 'foo', 1234) from com_mycompany_bar obj
这按预期工作,并且确实调用了该函数。问题是我实际上不需要该FROM子句,而是希望将其为空,而不是仅为了遵守语法而访问一个实体。
FROM
我在这里最好的选择是什么?
我看到几个可能的答案:
在标准JPA中,有两个选择,都涉及Oracle DUAL“表”
DUAL
在Java代码中:
@Entity(name = "Dual") @Table(name = "SYS.DUAL") public class Dual { @Id @Column(name = "DUMMY") private String dummy; }
在orm.xml中:
<named-query name="yourQuery"> <query><![CDATA[ SELECT FUNCTION('function_name', 'foo', 1234) FROM Dual d ]]> </query> </named-query>
在客户端代码中:
Query q = entityManager.createNamedQuery("yourQuery");
<named-native-query name="yourQuery"> <query><![CDATA[ SELECT function_name('foo', 1234) from sys.dual ]]> </query> </named-native-query>
Query q = entityManager.createNativeQuery("yourQuery");
作为最后的选择,您可以对JPA使用一些JPA实现扩展,并避免DUAL: