Java Spring数据JPA多对多检索
我有如下实体。我需要使用AENTY的id从CEntity检索CID列表 我必须遍历AEntity->ABMapping->BEntity->从CEntity获取CID 有没有办法在JPA中实现这一点,或者我应该采用原生查询方式连接所有四个表并从CEntity获得CID 实体AJava Spring数据JPA多对多检索,java,hibernate,jpa,spring-data-jpa,jpql,Java,Hibernate,Jpa,Spring Data Jpa,Jpql,我有如下实体。我需要使用AENTY的id从CEntity检索CID列表 我必须遍历AEntity->ABMapping->BEntity->从CEntity获取CID 有没有办法在JPA中实现这一点,或者我应该采用原生查询方式连接所有四个表并从CEntity获得CID 实体A @Entity public class AEntity { @Id private long id; @ManyToMany @JoinTable(name = "ABMapping", joinColumns =
@Entity
public class AEntity {
@Id
private long id;
@ManyToMany
@JoinTable(name = "ABMapping", joinColumns = @JoinColumn(name = "AEntity_ref", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "BEntity_ref", referencedColumnName = "id"))
private List<BEntity> bEntities = new ArrayList<>();
}
实体C
@Entity
public class CEntity {
@Id
private long id;
private String CID;
private List<BEntity> bEntity;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "c", cascade =
CascadeType.ALL)
public List<BEntity> getBEntities() {
return bEntity;
}
@Column(name = "CID_column")
public String getCId() {
return CID;
}
public void setCId(String CID) {
this.CID = CID;
}
}
@实体
公费百分制{
@身份证
私人长id;
私有字符串CID;
私人名单;
@OneToMany(fetch=FetchType.LAZY,mappedBy=“c”,级联=
级联型(全部)
公共列表getbenties(){
回归本原性;
}
@列(name=“CID\u列”)
公共字符串getCId(){
返回CID;
}
公共无效设置CID(字符串CID){
this.CID=CID;
}
}
我同意@JB Nizet的建议
select distinct c from AEntity a join a.bEntities b join b.cEntity c where a.id = :id
你已经试过什么了?可以通过JPA实现。为什么您有ABMapping实体?它是无用的(而且有问题,因为它映射到与用于多对多关联的联接表相同的表)。也就是说:你试过什么吗。你读过JPQL的文档了吗?@MaciejKowalski我在AEntityRepository中尝试过类似的方法,它扩展了Crudepository以获得Bentity,但不确定如何从Bentity获得CEntity。按实体Id(长Id)列出查找的实体;对于像findByName这样的简单查询以外的任何查询,都应该使用有意义的方法名,用查询注释注释该方法,并指定您的JPQL查询。@JBNizet Ok。我已经阅读了jpql示例和文档,并提出了以下查询。你能帮我查一下我遗漏了什么吗<代码>从百分之c中选择不同的c连接c.b连接b.a实体a,其中a.id=:id
@Entity
public class CEntity {
@Id
private long id;
private String CID;
private List<BEntity> bEntity;
@OneToMany(fetch = FetchType.LAZY, mappedBy = "c", cascade =
CascadeType.ALL)
public List<BEntity> getBEntities() {
return bEntity;
}
@Column(name = "CID_column")
public String getCId() {
return CID;
}
public void setCId(String CID) {
this.CID = CID;
}
}
select distinct c from AEntity a join a.bEntities b join b.cEntity c where a.id = :id