Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Spring数据JPA多对多检索_Java_Hibernate_Jpa_Spring Data Jpa_Jpql - Fatal编程技术网

Java Spring数据JPA多对多检索

Java 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 =

我有如下实体。我需要使用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 = @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