首页 > 解决方案 > 如何在 JPA 中使用静态变量作为命名本机查询的值?

问题描述

我想使用静态变量作为 JPA (persistence.xml) 文件中的命名本机查询的查询。

我正在使用 Spring Boot 2.1.9 和休眠 5.3.12。

我有一个界面:

public interface SqlQueryFacture {
    String MEMOIRES_TABLE_BY_FACTURE = "SELECT ......";
}

我想像这样MEMOIRES_TABLE_BY_FACTURE在persistence.xml文件中用作值


<entity-mappings version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence/orm"
                 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                 xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence/orm
    http://xmlns.jcp.org/xml/ns/persistence/orm_2_2.xsd">

    <entity class="fr.pp.entities.factures.Facture">
        <named-native-query name="Facture.getMemoiresTableByFactureId" result-set-mapping="MemoireTableRowDtoMapping">
            <query>SqlQueryFacture.MEMOIRES_TABLE_BY_FACTURE</query>
        </named-native-query>
    </entity>

</entity-mappings>

我可以在不使用@NamedNativeQuery实体类的情况下做到这一点吗?

标签: springhibernatejpa

解决方案


我猜您正在尝试通过 JPA 进行动态查询。不幸的是,JPA 不提供对动态查询的支持。

你不能在 JPA (persistence.xml) 中做:

<query>SqlQueryFacture.MEMOIRES_TABLE_BY_FACTURE</query>

例如 :

<!-- Query takes HQL (Hibernate Query Language) directly -->
<query>SELECT p from Product p</query>

这是允许的。


推荐阅读