2016-09-10 81 views
1

我有使用Hibernate的錯誤/ HQL休眠選擇錯誤的內連接

我的表是表1(ID,數據),其中id - >主鍵和表2(ID,anotherdata),其中id - >對table1.id的外鍵引用。

第一類 - >

@Entity 
@Table(name = "table1") 
public class Table1 { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @Column(name = "data") 
    private String data; 

    @OneToOne 
    private Table2 table2; 
    //construct, get, set 
} 

第二類 - >

@Entity 
@Table(name = "table2") 
public class Table2 { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @Column(name = "anotherdata") 
    private String data; 
    //get, set, construct 
} 

HQL查詢是SELECT t1.id,t1.data,t2.data FROM表1爲t1 JOIN t1.table2 as t2

Hibernate日誌:select t1.id,t1.data,t2.anotherdata from table1 t1 inner join table2 on t1.t2_id = t2.id

這個原因錯誤錯誤:列t1.t2__id並不在此聲明的 「關於t1.t2_id = t2.id」到底存在

我應該有「上t1.id = t2.id「(純sql)

我該如何解決這個問題?將感謝你的答案!

回答

0

您所查詢的是正確的,但你應該改變的映射:

@Entity 
@Table(name = "table1") 
public class Table1 { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @Column(name = "data") 
    private String data; 

    @OneToOne(mappedBy = "table1", cascade = CascadeType.ALL) 
    private Table2 table2; 
    //construct, get, set 
} 



@Entity 
@Table(name = "table2") 
public class Table2 { 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Column(name = "id") 
    private int id; 

    @Column(name = "anotherdata") 
    private String data; 
    //get, set, construct 

    @OneToOne 
    @PrimaryKeyJoinColumn 
    private Table1 table1; 
} 
+0

感謝。它的工作原理,但現在我得到了列表列表中的ClassCastException list = session.createQuery(「SELECT t1.id,t1.data,t2.data FROM Table1 as t1 JOIN t1.table2 as t2」)。list() ; ** –

+1

PS。解決了它。我的HQL返回列表其中Object [0]是table1 id,... [1]是table1數據和.. [2]是table2 id。要返回列表您應該使用* SELECT t1 FROM Table1 t1 JOIN t1.table2 * –