2016-07-15 32 views
0

我使用Spring mvc與休眠,我有我的SQL服務器數據庫中的查找表。這個表有4列映射作爲外鍵而不是主鍵在sql server中的另一個關鍵

 @Entity 
     @Table(name = "VLE_LOOKUP_DATA") 

     public class Lookup_Data{ 

      @Id 
      @GeneratedValue(strategy = GenerationType.IDENTITY) 
      private long ID; 

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

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

      @Column(name = "DESCRIPTION") 
      private String DESCRIPTION; 
     } 

這張表與多個表有一對一的關係,例如與學生表有一對一的關係。

@Entity 
    @Table(name = "STUDENT") 

    public class student{ 

     @Id 
     @GeneratedValue(strategy = GenerationType.IDENTITY) 
     private long STUDENT_ID; 

     @OneToOne 
     @JoinColumn(name = "DEPARTMENT_ID") 
     private Lookup_Data DEPARTMENT_ID; 

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

     @OneToOne 
     @JoinColumn(name = "GENDER_ID") 
     private Lookup_Data GENDER_ID; 
    } 

這裏的外鍵來自查找表是不是查找data.its列名CODE這是在其他tables.That外鍵所引用的主鍵(ID)。這就是爲什麼當我運行這個例如OneToOne關係給出的錯誤爲

java.sql.SQLException: Conversion failed when converting the varchar to data type int. 

因爲代碼是字符串值。

有沒有什麼辦法可以在中實現這個場景Spring Mvc啓動應用程序

注意:sql server此查詢可以做所需的工作。

SELECT * FROM STUDENT as e left join VLE_LOOKUP_DATA as di on e.DEPARTMENT_ID=di.CODE 

回答

0

JPA旨在支持廣泛的DBMS(數據庫服務器),因此它只支持SQL標準規範。

在您當前的情況下,SQL規範不支持兩個字段之間的比較等於(可能僅由sql server支持),所以JPA引發此錯誤。所以我認爲不是使用關係映射來獲取Lookup_data,而是使用普通的JPQL或本地查詢。

+0

原生查詢正在工作,但在普通pk的映射情況下,我們不需要使用連接查詢,而是使用fk.so自動填充我們可以在當前情況下得到這個結果 –

+0

任何情況下,不支持不同數據類型之間的映射。 –

+0

不同的數據類型是指int類型以外的其他類型嗎?就像在這種情況下它的字符串類型。 DEPARTMENT_ID(string) - > CODE(string),因爲在這裏我們不能指定哪個表列被引用爲外鍵。 –

相關問題