小编典典

JPQL中的FROM子句为空?

sql

我正在使用JPQL选择来访问Oracle DB函数: select FUNCTION('function_name', 'foo', 1234) from com_mycompany_bar obj

这按预期工作,并且确实调用了该函数。问题是我实际上不需要该FROM子句,而是希望将其为空,而不是仅为了遵守语法而访问一个实体。

我在这里最好的选择是什么?


阅读 169

收藏
2021-04-22

共1个答案

小编典典

我看到几个可能的答案:

在标准JPA中,有两个选择,都涉及Oracle DUAL“表”

  1. 映射DUAL到实体并在FROM子句中使用它。这是更“ JPQL”的方式,但涉及更多:

在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");
  1. 只需使用使用 DUAL

在orm.xml中:

<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

2021-04-22