2017-08-12 33 views
0
Entity(name = "Assignment") 
class Assignment { 
    @Id 
    private int id; 

    private String assignmentCode; 

} 

Entity(name = "Review") 
class Review { 
    @Id 
    private int id; 

    private String assignmentCode; 
} 

我有2個表,每個有2列如上。 我想在分配實體中創建評論列表,並將這些評論連接到列assignmentCode上。休眠一對多的JoinColumn同名

在分配,我定義如下:

@OneToMany(targetEntity = Review.class, fetch=FetchType.EAGER) 
@JoinColumn(name="assignmentCode") 
private List<Review> reviews = new ArrayList<Review>(); 

但是當我檢索分配分配= session.findById(Assignment.class,ID); 我收到異常導致:com.microsoft.sqlserver.jdbc.SQLServerException:不明確的列名'assignCode'

什麼是正確的定義評論集合? 我無法更改表結構以具有不同的列名稱。

+0

如果你定義@JoinColumn(name = 「assignmentCode」,表= 「your_Review_tableName_here」) – dimitrisli

回答

0

這個正確的解決方法是(https://forum.hibernate.org/viewtopic.php?f=1&t=1044726&start=0&sid=2e66d1aff1017f61f574f00e58836988

@Entity(name = "Assignment") 
class Assignment { 
    @Id 
    private int id; 

    private String assignmentCode; 

    @OneToMany(mappedBy = "assignment") 
    private List<Review> reviews = new ArrayList<Review>(); 

    public void addReview(Review review) { 
     reviews.add(review); 
     reviews.setPost(this); 
    } 

    public void removeReview(Review review) { 
     reviews.remove(review); 
     reviews.setAssignment(null); 
    } 

} 

@Entity(name = "Review") 
class Review { 
    @Id 
    private int id; 

    @ManyToOne(fetch = FetchType.LAZY) 
    @JoinColumn(
     name = "assignmentCode", 
     referencedColumnName = "assignmentCode" 
    ) 
    private Assignment assignment; 
} 
0

您應該:

  1. 名稱爲 「assignmentCode」 的Assignment.assignmentCode之前添加列註釋(@Column)(並沒有這個annotaion等領域)。
  2. 在您的類實體之前添加Table註釋。
  3. 聲明添加到JoinColumn註釋中。

最終代碼:

@Entity 
@Table(name = "assignment") 
class Assignment { 
    @Id 
    private int id; 

    @Column(name="assignment_code") 
    private String assignmentCode; 

    @OneToMany(targetEntity = Review.class, fetch=FetchType.EAGER) 
    @JoinColumn(name="assignment_code", table="review") 
    private List<Review> reviews = new ArrayList<Review>(); 
} 

@Entity 
@Table(name = "review") 
class Review { 
    @Id 
    private int id; 

    @Column(name="assignment_code") 
    private String assignmentCode; 
} 
+0

我正在現有的數據庫,所以我不能更改列名稱。所以我用@Column(name =「assignmentCode」)並做了這些改變。但我得到的異常引起:org.hibernate.cfg.NotYetImplementedException:在二級表中具有FK的集合 – jana

+0

然後,我需要看到您現有的數據庫方案來幫助你。 或者您可以根據您的方案自行更改註釋中的名稱(JoinColumn,Column,Table)。 –

+0

分配表: 列: ID, AssignmentCode --- 審查表: 列: ID, AssignmentCode – jana

0

看到您的錯誤信息,我相信這是因爲你的列的名稱是與Java變量的名字不同,通常,我將把我的數據庫像assignment_code列本專欄介紹了審閱與作業之間的聯繫。

我的第一個建議是,如果我的預感正確瞭解數據庫列和Java變量之間的不同命名,請將@Column(name = "assignment_code")放在private String assignmentCode以上。

二,我認爲你在定義@OneToMany關係時有一個錯誤。我會在Assignment課上做這樣的事情(我假設你想要類似單向,從你的代碼中看到)。

@OneToMany(cascade = CascadeType.ALL, fetch=FetchType.LAZY, orphanRemoval = true) 
@JoinColumn(name="assignment_code") 
private List<Review> reviews = new ArrayList<Review>(); 

提醒,在@JoinColumn名字是引用列名的數據庫和不是Java變量名

+0

礦是一個現有的數據庫。所以我不能更改列名稱 – jana