2014-02-19 4 views
1

Я пытаюсь создать отношение «один ко многим» с @JoinTable. Код работает и делает то, что он должен делать, НО, есть ли способ добавить больше столбцов в таблицу соединений? Это будет бизнес-приложение, которое нуждается в какой-то истории, поэтому мне понадобятся поля, такие как add_user, update_user, timestamp о создании/обновлении в таблице соединений. Есть ли элегантный способ сделать это с Java, не добавляя дополнительные поля через таблицы изменений? Если есть, как изящно редактировать эти данные, скажем, я добавляю новое отношение, как изменить значение указанных полей? Я говорю элегантный, потому что вы всегда можете сделать что-то уродливое, в данном случае - создать отношение, а затем обновить поля этого отношения обоими идентификаторами, мне интересно, есть ли более красивое, более похожее на 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

Смежные вопросы