2012-04-22 4 views
0

У меня есть следующие таблицы: Tag, Employee, Location. Сотрудник и местонахождение могут иметь больше тегов. Я думаю, что лучше всего создавать новые таблицы для этих отношений так: employee_tag и location_tag.JPA ManyToOne в новом столе

Как это сделать с помощью JPA? Сейчас я получил это: класс Employee:

@OneToMany() 
@JoinTable(name="employee_tag", joinColumns={ 
    @JoinColumn(name="ID_employee", referencedColumnName="ID") 
}, inverseJoinColumns={ 
    @JoinColumn(name="ID_tag", referencedColumnName="ID") 
}) 
private Collection<Tag> tags; 

Tag класс:

@ManyToOne() 
private Employee employee; 

Он создает новую таблицу с именем employee_tag но тег все еще содержит столбец EMPLOYEE_ID. Как связать тег с этой таблицей?

+1

См http://stackoverflow.com/questions/5165743/spring-roo-hibernate- one-to-many-relationship-создает-дополнительный-стол – axtavt

+0

Oke хороший, так что я хочу почти по умолчанию. Но в таблице тегов все еще есть employee_ID. – Klaasvaak

ответ

1

Если вам нужна однонаправленная связь «один-ко-многим», вы не должны ставить ассоциацию сотрудников в классе тегов, вам необходимо объявить ассоциацию в классе Employee.

@Entity 
public class Employee { 
    @OneToMany() 
    @JoinTable(name="employee_tag", joinColumns={ 
    @JoinColumn(name="ID_employee", referencedColumnName="ID") 
    }, inverseJoinColumns={ 
    @JoinColumn(name="ID_tag", referencedColumnName="ID") 
    }) 
    public Collection<Tag> tags; 
    ... 
} 

@Entity 
public class Tag {  
    ... 
} 

В противном случае вы можете сделать двунаправленную связь, как показано ниже:

@Entity 
public class Employee { 
    @OneToMany(mappedBy="troop") 
    public Collection<Tag> tags; 
    ... 
} 

@Entity 
public class Tag { 
    @ManyToOne 
    @JoinColumn(name="employee_fk") 
    public Employee employee; 
    ... 
} 

Посмотрите на hibernate annotations doc

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