我正在使用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。
谢谢!
发布于 2018-06-20 17:55:32
因为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);
}https://stackoverflow.com/questions/50945121
复制相似问题