【问题标题】:JPA query left join without loading the joined entity fieldJPA查询左连接而不加载连接实体字段
【发布时间】:2013-07-17 10:41:58
【问题描述】:

我有 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 {
    @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;
 }

我做了一个 JPA 查询,例如:

SELECT l FROM Link l left join fetch l.subnetwork sann   
where sann.project.id = :projectId 

它会生成类似于以下内容的 SQL 查询:

select * from RMT6.link, SUBNETWORK where link.subnetwork = SUBNETWORK.id 
and SUBNETWORK.project=?

如何触发仅选择第一个实体的字段并排除第二个实体的字段的 JPQL 查询? 我需要在 JPQL 查询中进行哪些更改?

【问题讨论】:

    标签: java hibernate jpa jpql


    【解决方案1】:

    根据你的实体关系,我认为你不需要使用JOIN查询。

    SELECT * FROM LINK l WHERE l.network.project.id = :projectId
    

    【讨论】:

    • @JayZee 仅供参考,如果您在 hibernate/JPA 中使用关系的 PK,则无需创建别名或连接。这是因为如果您看到基础表已经以外键的形式保存了此 PK 信息。因此,FKs 列中的所有 PK 都不需要连接。希望这对您有所帮助。
    • 如何在 OneToMany 上使用 join 和列表?我尝试使用显式加入所有表的“获取”
    猜你喜欢
    • 1970-01-01
    • 2021-05-13
    • 2018-11-13
    • 2019-06-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    相关资源
    最近更新 更多