2017-09-11 46 views
0

我在Hibernate中有多對多的關係其他colums所以我有一個額外的java類和模型,另一個類與主鍵......現在在HQL我需要一個查詢,檢索這些數據,但我有問題加入條件。HQL多對多連接多列

這是我的第一類:

@Entity 
@Table(name = "Firsts") 
public class First { 
    @Id 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    private int id; 
    @OneToMany(mappedBy = "primaryKey.second") 
    private List<FirstsSeconds> seconds = new LinkedList<>(); 
    @Column(name="description") 
    private String description; 
    ... 
} 

第二類:

@Entity 
@Table(name="Seconds") 
public class Second { 
    @Id 
    private String code; 

    @OneToMany(mappedBy = "primaryKey.first") 
    private List<FirtsSeconds> firsts = new LinkedList<>(); 

    ... 
} 

,並用另外列的表多對多:

@Entity 
@Table(name = "firsts_seconds") 
@AssociationOverrides({ @AssociationOverride(name = "primaryKey.first", joinColumns = @JoinColumn(name = "id")), 
     @AssociationOverride(name = "primaryKey.second", joinColumns = @JoinColumn(name = "code")) }) 
public class FirstsSeconds{ 

    @EmbeddedId 
    private FirstsSecondsId primaryKey = new FirstsSecondsId(); 

    @Column(name = "extra", nullable = false) 
    private String extra; 

    ... 
} 

所以ID類:

@Embeddable 
public class FirstsSecondsId { 

    @ManyToOne 
    private First first; 
    @ManyToOne 
    private Second second; 

    ... 
} 

最後得到HQL結果,我創建領域新的類,我想: 公共類NewObject的

public CargoOrder(String firstDescription, String fsExtra) { 
    this.firstDescription = firstDescription; 
    this.fsExtra = fsExtra; 
} 
... 

首先我想從FirstsSecond首先descrption和額外的,所以這是我的查詢與JOIN fr.seconds爲FS

@Query("SELECT new com.mypackage.NewObject(" 
     + "fr.description as firstDescription, fs.extra as fsExtra) " 
     + "FROM First as fr" 
     + "JOIN fr.seconds as fs") 
public List<NewObject> findManyToMany(); 

但我不結果:(......在這種情況下,我必須指定where條件?

@Query("SELECT new com.mypackage.NewObject(" 
     + "fr.description as firstDescription, fs.extra as fsExtra) " 
     + "FROM First as fr" 
     + "JOIN fr.seconds as fs WHERE fr.first = fs.primaryKey.first") 
public List<NewObject> findManyToMany(); 

那上不能編譯JOIN fr.seconds爲fs的WHERE fr.first = fs.primaryKey.first。 ..

親切的問候。

回答

0

解決......在應用程序的屬性我看到有一個在連接條件不好的匹配spring.jpa.show_sql = true調試,我錯了映射按鍵:

頭等它primaryKey.first(未秒):

@OneToMany(mappedBy = "primaryKey.first") 
private List<FirstsSeconds> seconds = new LinkedList<>(); 

而在二primaryKey.second(不在前):

@OneToMany(mappedBy = "primaryKey.second") 
private List<FirstsSeconds> firsts = new LinkedList<>();