2013-07-17 23 views
0

我有3個JPA實體,如: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查詢中更改什麼?

回答

1

根據您的實體關係,我認爲您不需要使用JOIN查詢。

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

you rock :-) !!!!! – JayZee

+1

@JayZee只是供參考,如果您在hibernate/JPA中使用關係的PK,則不需要創建別名或連接。這是因爲如果你看到底層表已經以外鍵的形式持有這個PK信息。所以從FK列中的所有PK都不需要加入。希望這可以幫助你。 –