Hibernate 如何使用JPA Criteria Builder编写带有附加计数列的查询
我正在努力编写一个JPA查询,该查询将返回数据库中的所有p对象,并且在它们旁边,我希望有propertyA=1的子对象的计数 SQL查询 选择p.*,从s_表s中选择counts.id 其中p.id=s.p_id,s.propertyA=p_表p中的1 映射:Hibernate 如何使用JPA Criteria Builder编写带有附加计数列的查询,hibernate,jpa,jpa-2.0,criteria-api,Hibernate,Jpa,Jpa 2.0,Criteria Api,我正在努力编写一个JPA查询,该查询将返回数据库中的所有p对象,并且在它们旁边,我希望有propertyA=1的子对象的计数 SQL查询 选择p.*,从s_表s中选择counts.id 其中p.id=s.p_id,s.propertyA=p_表p中的1 映射: @Entity @Table(name = "t_table") public class PTable{ @Id private String id; @Version privat
@Entity
@Table(name = "t_table")
public class PTable{
@Id
private String id;
@Version
private Long version;
private String subject;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true, fetch = FetchType.EAGER)
@JoinColumn(name = "p_id", referencedColumnName = "id")
private Set<STable> sSet = new HashSet<>();
}
@Entity
@Table(name = "s_table")
public class STable {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "p_id")
private String pId;
private String propertyA;
}
另外,您是否想指出一些用JPA编写复杂查询的好教程
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<PTable> q = cb.createQuery(PTable.class);
Root<PTable> c = q.from(PTable.class);
您还必须更改实体以正确映射关系,双向且懒惰以提高性能,如下所示:
public MyPojo(String pId, Long version, String subject, Long sId, Long count){
[...]
}
可接受
@OneToMany(mappedBy="p",fetch = FetchType.LAZY)
private Set<STable> sSet;
是否已在实体定义中映射联接关系?给他们看。为什么不使用一个简单的sql查询,比如SELECT s.*,countp.id FROM p_table p JOIN s_table s ON p.id=s.p_id,其中p.propertyA=1 groupby s.id。这样的查询更容易转换为JPQL,JPA CriteriaQueryI添加了映射。此映射已存在于代码中。我必须创建这样的查询。这不清楚,因为您可能希望选择PTable与countSTable之间的关系?哦..对不起,我更正了描述。结果是,我想要数据库中的所有P对象,并且在它们旁边,我想要有propertyA=1的S子对象的计数。
@OneToMany(mappedBy="p",fetch = FetchType.LAZY)
private Set<STable> sSet;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name="id")
private PTable p;