2008-10-13 2 views
1

Я пытаюсь отобразить ManyToMany отношения между 2 таблицы, оба имеют составные первичные ключиHibernate @ManyToMany картографирования с составными ключами

LSFOCTB which primary key is composed of : LSFOC_CODSOC,LSFOC_CODLSC,LSFOC_CODFOC 

LSFORTB which primary key is composed of : LSFOR_CODSOC,LSFOR_CODLSC,LSFOC_CODFOR 

The table in charge of the ManyToMany relationship is : 

LSFCFTB, with : LSFCF_CODSOC,LSFCF_CODLSC,LSFCF_CODFOC,LSFCF_CODFOR 

Так, в спящий режим отображения модели LSFOCTB, я попробовал:

@ManyToMany(targetEntity = package.LSFOCTB.class, cascade = { CascadeType.PERSIST, 
      CascadeType.MERGE }) 
    @JoinTable(name = "LSFCFTB", joinColumns = { 
      @JoinColumn(name = "LSFCF_CODLSC", referencedColumnName = "LSFOC_CODLSC"), 
      @JoinColumn(name = "LSFCF_CODFOC", referencedColumnName = "LSFOC_CODFOC"), 
      @JoinColumn(name = "LSFCF_CODSOC", referencedColumnName = "LSFOC_CODSOC") }, 
    inverseJoinColumns = { @JoinColumn(name = "LSFCF_CODLSC", referencedColumnName = "LSFOR_CODLSC"), 
      @JoinColumn(name = "LSFCF_CODFOR", referencedColumnName = "LSFOR_CODFOR"), 
      @JoinColumn(name = "LSFCF_CODSOC", referencedColumnName = "LSFOR_CODSOC") }) 

до геттера. Но это не будет работать ... Ошибки при попытке получить доступ к отдаленной коллекции является:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in class path resource [beans-dao.xml]: Invocation of init method failed; nested exception is org.hibernate.MappingException: Repeated column in mapping for collection: package.LSFOCTB.distantCollection column: LSFCF_CODLSC 

Удался уже сделать отображение работы спящего режима для отношений ManyToMany? Если да, то что не так с моим отображением? Благодарим за помощь!

+0

Я искал информацию на следующих страницах: http://www.hibernate.org/hib_docs/annotations/reference/en/html/entity.html#entity-hibspec chapter: 2.2.5.3.3. Многие-ко-многим , а также: http://saloon.javaranch.com/cgi-bin/ubb/ultimatebb.cgi?ubb=get_topic&f=78&t=003838 – 2008-10-13 14:03:21

ответ

1

Проблема заключается в том, что вы создаете таблицу объединений с 6 столбцами и для ваших столбцов есть повторяющиеся имена. Фактически вы создаете 2 столбца с именем LSFCF_CODLSC и 2 столбца с именем LSFCF_CODFOR и 2 столбца с именем LSFCF_CODSOC.

Я хотел бы предложить вам попробовать это:

@JoinTable(name = "LSFCFTB", joinColumns = { 
        @JoinColumn(name = "LSFOC_LSFCF_CODLSC", referencedColumnName = "LSFOC_CODLSC"), 
        @JoinColumn(name = "LSFOC_LSFCF_CODFOC", referencedColumnName = "LSFOC_CODFOC"), 
        @JoinColumn(name = "LSFOC_LSFCF_CODSOC", referencedColumnName = "LSFOC_CODSOC") }, 
     inverseJoinColumns = { @JoinColumn(name = "LSFOR_LSFCF_CODLSC", referencedColumnName = "LSFOR_CODLSC"), 
        @JoinColumn(name = "LSFOR_LSFCF_CODFOR", referencedColumnName = "LSFOR_CODFOR"), 
        @JoinColumn(name = "LSFOR_LSFCF_CODSOC", referencedColumnName = "LSFOR_CODSOC") }) 

или что-то подобное (в соответствии с именованием), чтобы дать каждому столбцу уникального имени.

+0

Какие имена столбцов в таблице названный LSFCFTB в базе данных? name = "существующее имя столбца" и referConumnName = "имя столбца, на который ссылаются" – 2008-10-14 15:40:54

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