Spring数据:将@Query与规范相结合

时间:2015-04-17 15:49:24

标签: java spring jpa jpql spring-data-jpa

我有两个实体:

@Entity
public class FirstEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @NotNull
    @Size(min = 1, max = 50)
    private String title;

    @Column(nullable = true)
    private String description;

    @OneToMany(mappedBy = "firstEntity")
    private Set<SecondEntity> secondEntities = new HashSet<>();

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public String getTitle() {
        return title;
    }

    public void setTitle(String title) {
        this.title = title;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Set<SecondEntity> getSecondEntities() {
        return secondEntities;
    }

    public void setSecondEntities(Set<SecondEntity> secondEntities) {
        this.secondEntities = secondEntities;
    }
}

@Entity
public class SecondEntity {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    private FirstEntity firstEntity;

    public Long getId() {
        return id;
    }

    public void setId(Long id) {
        this.id = id;
    }

    public FirstEntity getFirstEntity() {
        return firstEntity;
    }

    public void setFirstEntity(FirstEntity firstEntity) {
        this.firstEntity = firstEntity;
    }
}

我有一个存储库:

@Repository
public interface FirstRepository extends JpaRepository<FirstEntity, Long>,
        JpaSpecificationExecutor<FirstEntity> {
    @Query("SELECT e.id, e.title, COUNT(*) " +
            "FROM myPackage.FirstEntity e " +
            "LEFT JOIN e.secondEntities " +
            "GROUP BY e.id, e.title")
    List<Object[]> getData();
}

我想在上面的方法中添加specyfications,所以我修改了这样的源代码:

@Repository
public interface FirstRepository extends JpaRepository<FirstEntity, Long>,
        JpaSpecificationExecutor<FirstEntity> {
    @Query("SELECT e.id, e.title, COUNT(*) " +
            "FROM myPackage.FirstEntity e " +
            "LEFT JOIN e.secondEntities " +
            "GROUP BY e.id, e.title")
    List<Object[]> getData(Specifications<FirstEntity> specifications);
}

但是当我调用getData方法时,我看到以下异常:java.lang.IllegalArgumentException: Parameter with that position [1] did not exist

可以将JPQL查询与规范结合起来吗?

0 个答案:

没有答案