Java JPA查询未加载联接实体字段而离开联接
我有3个JPA实体,例如:Java JPA查询未加载联接实体字段而离开联接,java,hibernate,jpa,jpql,Java,Hibernate,Jpa,Jpql,我有3个JPA实体,例如: @Entity public class Link implements { @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "network", referencedColumnName = "id") private Network network; //... } @Entity public class Network implements LinkOwner {
@Entity
public class Link implements {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "network", referencedColumnName = "id")
private Network network;
//...
}
@Entity
public class Network implements LinkOwner {
@OneToMany(mappedBy = "network")
@Cascade(value = { CascadeType.ALL })
private Set<Link> links;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "project", referencedColumnName = "id", nullable = false)
private Project Network.project;
//...
}
@Entity
public class Project {
@OneToMany(mappedBy = "project", orphanRemoval = true)
@Cascade(value = { CascadeType.ALL })
@Fetch(FetchMode.SELECT)
private Set<Network> networks;
}
它生成一个SQL查询,类似于:
select * from RMT6.link, SUBNETWORK where link.subnetwork = SUBNETWORK.id
and SUBNETWORK.project=?
如何触发仅选择第一个实体的字段并排除第二个实体的字段的JPQL查询?
我需要在JPQL查询中更改什么?基于您的实体关系,我认为您不需要使用
JOIN
查询
SELECT * FROM LINK l WHERE l.network.project.id = :projectId
@JayZee仅供参考,如果您正在使用hibernate/JPA中的关系PKs,则不需要创建别名或联接。这之所以成立,是因为如果您看到基础表已经以外键的形式持有此PK信息。因此,FKs列中的所有PK都不需要联接。希望这对您有所帮助。我如何使用“加入OneToMany with list”?我尝试了使用显式连接所有表的“fetch”
SELECT * FROM LINK l WHERE l.network.project.id = :projectId