2014-02-19 64 views
1

我正在嘗試與@JoinTable創建一對多關係。代碼的工作原理和做它應該做的,但是,有沒有辦法添加更多的列到連接表?這將是一個需要某種歷史記錄的業務應用程序,所以我需要在連接表中創建/更新字段,如add_user,update_user,timestamp。有沒有一種優雅的方式來與Java做到這一點,而不通過改變表格添加額外的字段?如果有,如何優雅地編輯這些數據,可以說我增加了新的關係,如何改變提到的領域的價值?我說優雅,因爲你總是可以做一些醜陋的事情,在這種情況下 - 創建關係,然後用兩個ID更新該關係的字段,如果有更漂亮,更多的Java方式,我很感興趣。JPA:@JoinTable中的其他字段

兩個實體的代碼:

@Entity 
@Table(name="users") 
public class Users { 
    int id; 
    String username; 
    private List<Jobs> jobs; 

    @OneToMany 
    @JoinTable(
     name="users_jobs_rel", 
     joinColumns= @JoinColumn(name="user_id", referencedColumnName="user_id") , 
     inverseJoinColumns= @JoinColumn(name="job_id", referencedColumnName="job_id") 
    ) 
    public List<Jobs> getJobs() { 
     return jobs; 
    } 
    public void setJobs(List<Jobs> jobs) { 
     this.jobs = jobs; 
    } 
    @Id 
    @GeneratedValue(strategy = IDENTITY) 
    @Column(name = "user_id", unique = true, nullable = false) 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 
    public String getUsername() { 
     return username; 
    } 
    public void setUsername(String username) { 
     this.username = username; 
    } 
} 

@Entity 
@Table(name="jobs") 
public class Jobs { 
    int id; 
    String title; 
    @ManyToOne 
    private Users user; 

    @Id 
    @GeneratedValue(strategy = IDENTITY) 
    @Column(name = "job_id", unique = true, nullable = false) 
    public int getId() { 
     return id; 
    } 
    public void setId(int id) { 
     this.id = id; 
    } 

    @Column 
    public String getTitle() { 
     return title; 
    } 
    public void setTitle(String title) { 
     this.title = title; 
    } 
} 

在此先感謝。

回答

1

通常,當您使用Many-to-Many時,您需要爲此關係創建附加表。但是現在,我不知道你爲什麼使用一對多來創建新表(爲什麼?這是不必要的)。答案是肯定的,你可以用@JoinColumn註釋加入一些額外的列。而且要注意,如果你真的需要雙向關係:)祝你好運

編輯:

Is there an elegant way to do this with Java, without adding additional 
fields through altering tables? 

你怎麼說「改變」是什麼意思?難道你不讓Hibernate使用hbm2dll自動創建它?

+0

您的回答是正確的,但我已經使用http://stackoverflow.com/questions/5127129/mapping-many-to-many-association-table-with-extra-columns解決我的問題。仍然+1,努力:) – Candyman