2015-10-11 5 views
0

Прежде всего: я знаю, что здесь есть много похожих вопросов, но я прочитал большинство из них, и все, кажется, обращают немного разные проблемы, и никто не получил удовлетворительного ответа ... Поэтому я все еще надеюсь, что кто-то знает, как справиться со своей проблемой ...ManyToMany на части составного ключа

Просто сказал, что у меня есть сущность, которая имеет составной ключ, и я хочу присоединиться к коллекции других объектов на части этого составного ключа. К сожалению, hibernate заставляет меня включить в составную часть другую часть составного ключа, что приводит к бесполезным большим таблицам соединений (> 20 м строк для 250 различных наборов значений ...). Поэтому я хочу исключить ненужную часть ключа из соединения.

Entity зарисовки:

public class A { 
    @Id 
    int i_am_A; 

    @OneToMany 
    @JoinColumn(referencedColumnName = "i_am_A",name="A_i_am_A") 
    Set<AB> abs; 
} 

public class B { 
    @Id 
    int i_am_B; 

    @Id 
    int myLanguage; 

    ... 
} 

public class AB { 

    @ManyToOne 
    @Id 
    A myA; 

    @Id 
    int myB 

    @ManyToMany 
    @JoinColum(name="myB") 
    Collection<B> bs; 

    @Basic 
    String value 

} 

Так что это в основном A иметь отношения с B, который может иметь определенное значение, которое хранится в AB. Одна аномалия заключается в том, что B существует на нескольких языках, и AB должен указывать на все из них.

Кто-нибудь знает, как сделать это с Hibernate (без возможности реконструирования Db ... если возможно. Я знаю, что могут быть лучшие проекты, но сейчас в этой схеме есть несколько строк ...)?

+0

Я думаю, что проблема в вашей модели, она не должна быть '<- AB -> B <-C', с' C' быть множественные traslations из 'B'? – SJuan76

+0

@ SJuan76 Я боялся, что это единственное возможное решение ... – gapvision

ответ

0

решаемые это за счет изменения структуры базы данных в соответствии с @ SJuan76 комментарий

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