Spring Jpa存储库-Orm.xml

时间:2018-06-20 09:44:19

标签: jpa spring-data-jpa

我正在使用Spring Jpa存储库。

我不想在Java类(实体或存储库)中定义“命名查询”。我想在不同的xml文件(例如orm.xml)中定义“命名查询”。

.... XML FILE ....
<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.1" 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_1.xsd">

   <named-query name="MyEntity.findByField1">
      <query>
        <![CDATA[
        SELECT m
        FROM MyEntity m
        WHERE
            m.field1 = :field1
                    ]]>
      </query>
   </named-query>                                 
</entity-mappings>



.... REPOSITORY CODE ....
public interface MyEntityRepository extends JpaRepository<MyEntity, String>
{
   public Optional<MyEntity> findByField1(@Param("field1") String field1);
}

但是我的存储库未使用命名查询找到xml文件。如何配置spring-data-jpa以使用这些xml文件?我没有persistence.xml。

谢谢!

1 个答案:

答案 0 :(得分:0)

由于您的MyEntity内部已经具有field1属性,因此使用findByField1作为存储库方法名称可能会造成混淆。如下更改orm.xml并将其放入META-INF / orm.xml

<?xml version="1.0" encoding="UTF-8"?>
<entity-mappings version="2.1" 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_1.xsd">

   <named-query name="MyEntity.findByField1OrmXml">
      <query>
        <![CDATA[
        SELECT m
        FROM MyEntity m
        WHERE
            m.field1 = :field1
                    ]]>
      </query>
   </named-query>                                 
</entity-mappings>

并按如下所示更改存储库

public interface MyEntityRepository extends JpaRepository<MyEntity, String>
{
   public Optional<MyEntity> findByField1OrmXml(@Param("field1") String field1);
}