首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用spring-data的通用搜索

使用spring-data的通用搜索
EN

Stack Overflow用户
提问于 2014-01-09 20:01:46
回答 2查看 1.4K关注 0票数 1

我使用spring数据,我发现这些数据非常有趣,但是有一个问题,我想要一种通用的方法来搜索实体字段。

我得到了一个有多个字段的实体

代码语言:javascript
复制
public class Lostcard implements java.io.Serializable {
    private Integer id;
    private String nom;
    private String prenom;
    private String cin;
    @DateTimeFormat(pattern = "MM/dd/yyyy")
    private Date dateDeclaration;
    @DateTimeFormat(pattern = "MM/dd/yyyy")
    private Date dateDuplicata;
    private String annexeAdmin;
[...]

所以我想这样做:

代码语言:javascript
复制
public interface LostcardRepository extends JpaRepository<Lostcard, Integer> {

List<Lostcard> findByNom(String nom);
List<Lostcard> findByPrenom(String prenom);
List<Lostcard> findByCin(String cin);
    [...]
}

有没有像findByProperty(字符串属性,对象值)这样的通用方式?

EN

回答 2

Stack Overflow用户

发布于 2014-01-10 07:42:47

在我看来,最简单的方法是使用Specification。你必须让你的接口扩展JpaSpecificationExecutor,然后你可以使用你自己的规范来执行查询。

代码语言:javascript
复制
public interface LostcardRepository extends JpaRepository<Lostcard, Integer>, JpaSpecificationExecutor<Lostcard> {
...
}

然后实现如下所示的类:

代码语言:javascript
复制
public class PropertySpecifications {
    public static Specification<Lostcard> byProperty(final String propertyName, final Object propertyValue) {
      return new Specification<Lostcard>() {
        @Override
        public Predicate toPredicate(Root<Lostcard> candidateRoot, CriteriaQuery<?>  criteriaQuery, CriteriaBuilder criteriaBuilder) {
          return criteriaBuilder.equal(candidateRoot.get(propertyName), propertyValue);
        }
      };
    }
}

然后,您可以执行查询:

代码语言:javascript
复制
lostcardRepository.findAll(Specifications.where(PropertySpecifications.byProperty("property", "value")));
票数 6
EN

Stack Overflow用户

发布于 2014-01-09 23:47:13

您可以使用参数声明查询。您可以使用更复杂的方法,但是使用JpaRepository查询方法只能查询现有的实体字段。

代码语言:javascript
复制
@Query("SELECT p FROM Lostcard p WHERE p.yourfield = (:field)")
public Lostcard findByProperty(@Param("field") String property);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21019673

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档