Отображение @ManyToMany в режиме гибернации с составными ключами

#java #hibernate #jakarta-ee

Вопрос:

Я пытаюсь сопоставить множество взаимосвязей между 2 таблицами, обе из которых имеют составные первичные ключи

 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
 

Вам уже удалось заставить отображение гибернации работать для многих отношений ?
Если да, то что не так с моим отображением ?
Спасибо вам за вашу помощь !

Комментарии:

1. Я искал информацию на следующих страницах : hibernate.org/hib_docs/annotations/reference/en/html/… глава : 2.2.5.3.3. Многие ко многим, а также : saloon.javaranch.com/cgi-bin/ubb/…

Ответ №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") })
 

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

Комментарии:

1. Каковы имена столбцов в таблице с именем LSFCFTB в базе данных? name=»имя существующего столбца» и referencedColumnName=»имя столбца, на который ссылаются»