2015-05-27 33 views
0

我需要從屬性文件加載存儲庫中的查詢。例如,這裏:從屬性文件加載JPA存儲庫查詢

@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"字符串。有什麼辦法可以做到嗎?

+0

不是我所知道的。無論如何,你爲什麼要這麼做?如果你真的必須把你的命名查詢放在'orm.xml'中。 –

+0

春天我們可以使用xml配置而不是@Query註釋嗎? – user1516815

+1

當然,爲什麼你不能......這只是JPA的一種,你可以做任何你想做的事情。但是按照要求最初,爲什麼? –

回答

0

如上所示,我已經通過使用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> 

在甲骨文quries.xml和mysql-quries.xml我已經分別定義所有的本地查詢。當我需要更改查詢而不更改類文件時,我只需要提到我需要在persistence.xml中使用的文件名。