2012-05-29 2 views
4

У меня есть отношение типа @ManyToMany с ассоциацией @JoinTable.Hibernate manytomany @JoinTable + @SecondaryTable дублирующиеся записи

Дело в том, что сущность в отношении имеет свою собственную таблицу, но пара свойств должна перейти в таблицу ассоциаций.

A_C таблица в порядке думаю.

Добавление дубликата @SecondaryTable.

@Entity 
@Table(name = "A") 
@SecondaryTable(name = "A_C", pkJoinColumns = { 
@PrimaryKeyJoinColumn(columnDefinition = "A_ID", name = "A_ID")}) 
class A { 
    @ManyToMany(fetch = FetchType.LAZY) 
    @JoinTable(name = "A_B", joinColumns = {@JoinColumn(name = "A_ID")}, inverseJoinColumns = {@JoinColumn(name = "B_ID")}) 
    private List<B> bs = new ArrayList<B>(); 

    @Column(table = "A_B") 
    private int b1; 
} 

@Entity 
@Table(name = "B") 
@SecondaryTable(name = "A_B", pkJoinColumns = { 
@PrimaryKeyJoinColumn(columnDefinition = "B_ID", name = "B_ID")}) 
class B { 
    @Column(table = "A_B") 
    private int a1; 

    @Column(table = "A_B") 
    private int a2; 

    @ManyToMany(mappedBy = "A_ID", fetch = FetchType.LAZY) 
    private List<A> as = new ArrayList<A>(); 

} 

Это при сохранении A Примитивов, B дублируются в пути, где:

A_ID B_ID a1  a2 
    1  0 1  1  
    1  1 0  0 

Где должен быть

A_ID B_ID a1 a2 
    1  1 1  1 

@Embeddable С не будет работать ни один.

ssedano.

ответ

0

A_B является объединенным столом для таблицы A и B, но вы также используете его как дополнительную таблицу для B.

Это не работает. Какие значения должны иметь значения B.a1 и B.a2, если B присвоено нескольким A s?

Существует три возможности: * a1 и a2 относятся к ассоциации. В этом случае вам нужен класс ассоциации, в котором хранится эта дополнительная информация. * a1 и a2 только принадлежат B: a1 и a2 не должен быть в таблице A_B * A представляет собой композицию из B: Таблица A_B и B должны быть объединены, и многие-ко-многим заменено взаимно много отношений.

Без конкретных имен для атрибутов, которые трудно сказать, они действительно принадлежат.

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