如何在Spring数据JPA中使用XML配置进行命名查询?

时间:2014-07-24 10:29:01

标签: spring spring-data-jpa

根据Documentation,我们可以在XML中指定命名查询。但它没有告诉如何在代码中使用它。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:3)

正如Spring Data JPA here的首席开发人员所提到的,您需要做的就是(如果您使用的是更新版本或等于Spring Data JPA 1.5的版本 - 我使用1.6.1.RELEASE进行了测试)在存储库中添加一个与查询同名的方法。

例如,您可以使用以下代码:

    @Entity
    @NamedQuery(name = "User.findByLastname", query="select u from User u where u.lastname = ?1")
    public class User {
       //whatever
    }

如果您不想使用注释但更喜欢XML,则需要添加

<named-query name="User.findByLastname">
  <query>select u from User u where u.lastname = ?1</query>
</named-query>

orm.xml之处显示为here

最后,存储库看起来像

public interface UserRepository extends CrudRepository<User, Long> {

  @Query
  List<User> findByLastname(String lastname);
}

答案 1 :(得分:2)

say you have defined the `Named Query` as `application.myquery` in XML file.

在服务/ dao层

List results = em.createNamedQuery("application.myquery")
    .setParameter("username", "blah")
    .setParameter("password","blahblahblah")
    .getResultList();

orm文件需要包含在persistence.xml中,同样应该位于META-INF/persistence.xml

<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">

  <persistence-unit name="myUnit" transaction-type="RESOURCE_LOCAL">
    <mapping-file>META-INF/orm.xml</mapping-file>
    <exclude-unlisted-classes/>
  </persistence-unit>

</persistence>

有关详细信息,请参阅this

答案 2 :(得分:-1)

META-INF / orm.xml中

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

    <named-query name="Role.findByCond">
        <query>from Role where rid = ?1 and rname = ?2</query>
    </named-query>

</entity-mappings>

RoleRepository.java

@Query
List<Role> findByCond(String rid, String rname);