【问题标题】:Load JPA repository queries from a property file从属性文件加载 JPA 存储库查询
【发布时间】:2015-05-27 04:13:55
【问题描述】:

我需要从属性文件将查询加载到存储库中。例如,这里:

@Repository
public interface StudentRepository extends JpaRepository<Student, Integer> {

    @Query(value="SELECT * FROM student where year= :le", native=true)
    public List<Student> getStudentsByLevel(@Param("le") int level);

}

我需要从属性文件中加载"SELECT * FROM student where year= :le" 字符串。有什么办法吗?

【问题讨论】:

  • 我不知道。你为什么要那样做?如果你真的必须,你可以把你的命名查询放在orm.xml
  • spring可以用xml配置代替@Query注解吗?
  • 当然,你为什么不...这只是 JPA 的一个闲置,你可以做任何你想做的事情。但按照最初的要求,为什么?
  • 如最初的帖子所示,我正在使用 JPArepositories。现在我需要让我的应用程序同时支持 mysql 和 oracle,为 mysql 数据库定义的一些查询不支持 oracle 数据库。所以我试图让我的查询可配置。你能给我一些 xml 配置而不是 @Query 的例子吗?
  • 你应该使用 HQL 而不是 SQL,这样 hibernate 会处理这个问题。恕我直言,缺陷是您使用 SQL 而不是 HQL...

标签: java spring jpa spring-data-jpa


【解决方案1】:

如上所述,我通过使用 xml 配置的命名查询克服了这个问题。下面是例子。

persistence.xml

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
    version="1.0">

    <persistence-unit name="hibernatePersistenceUnit">

        <!-- <mapping-file>META-INF/jpql/oracle-quries.xml</mapping-file> -->
        <mapping-file>META-INF/jpql/mysql-quries.xml</mapping-file>
    </persistence-unit>
</persistence>

mysql-quries.xml

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="1.0"
    xmlns="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd ">

    <named-native-query name="Nodecontrol.lockNodeController">
        <query>
            SELECT * FROM student where year= :le
        </query>
    </named-native-query>
</entity-mappings>

在 oracle-quries.xml 和 mysql-quries.xml 中,我分别定义了所有本机查询。当我需要更改查询而不更改类文件时,我只需要提及我需要在 persistence.xml 中使用的文件名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-16
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多