根据Documentation,我们可以在XML中指定命名查询。但它没有告诉如何在代码中使用它。有人可以帮忙吗?
答案 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);