2014-01-23 2 views
7

Я новичок в обработке JPA с Maven и JBOSS с Restful сделать мое заявление я следующая проблема возникла мне делать DeployВызванный: org.hibernate.MappingException: Повторный столбец отображения для объекта

Caused by: javax.persistence.PersistenceException: [PersistenceUnit: com.company.test_resources_war_1.0-SNAPSHOTPU] Unable to build EntityManagerFactory 
    Caused by: org.hibernate.MappingException: Repeated column in mapping for entity: database.Photo column: fid_module (should be mapped with insert = \ "false \" update = \ "false \") "}} 

Не тот шаг, проверьте все решения, но ничего не нашел, может кто-нибудь мне помочь?

Заранее спасибо

Ниже я покажу код SQL в Postgres, что у меня есть, и я сделал отображение.

У меня есть три таблицы (активности, события и фото), где один из них (фото) относится к другой двум (активности и событий), но только в одной колонке (photo.fid_module)

SQL кода (база данных Enginer -> Postgresql):

CREATE TABLE activity (
    id_activity integer not null, 
    name character varying(150), 
    description text, 
    CONSTRAINT id_activity_pk PRIMARY KEY (id_activity) 
) 

CREATE TABLE event (
    id_event integer not null, 
    name character varying(150), 
    description text, 
    date timestamp without time zone, 
    CONSTRAINT id_event_pk PRIMARY KEY (id_event) 
) 

CREATE TABLE photo(
    id_photo integer not null, 
    path character varying(150), 
    fid_module integer not null, 
    CONSTRAINT id_photo_pk PRIMARY KEY (id_photo), 
    CONSTRAINT fk_photo_activity FOREIGN KEY (fid_module) 
     REFERENCE activity (id_activity) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT fk_photo_event FOREIGN KEY (fid_module) 
     REFERENCE event (id_event) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 
) 

Теперь сопоставление, которое я сделал с помощью Netbenas, и дал мне следующий код (я сделал сопоставление для трех таблиц, но при представлении меня проблема в классе Photo.java).

@Entity 
@Table(name = "photo") 
@XmlRootElement 
@NamedQueries({ 
    @NamedQuery(name = "photo.findAll", query = "SELECT p FROM Photo p"), 
    @NamedQuery(name = "photo.findByFidPhoto", query = "SELECT p FROM Photo p WHERE p.fidphoto = :fidphoto"), 
    @NamedQuery(name = "photo.findByIdPhoto", query = "SELECT p FROM Photo p WHERE p.idphoto = :idphoto")}) 
public class Photo implements Serializable { 
    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id_photo") 
    private Integer idPhoto; 
    @Column(name = "path") 
    private Recurso fidPath; 
    @JoinColumn(name = "fid_module", referencedColumnName = "id_activity") 
    @ManyToOne(optional = false, fetch = FetchType.LAZY) 
    private SliderWebHome fidModule; 
    @JoinColumn(name = "fid_module", referencedColumnName = "id_event") 
    @ManyToOne(optional = false, fetch = FetchType.LAZY) 
    private Publicacion fidModule1; 

    public ModuloRecurso() { 
    } 
    ....... 
} 

Я использую JPA за настойчивость (но МВН чистой установки и МВН JBoss-а: развернуть несколько вытягивает меня зимуют зависимости) может кто-нибудь сказать мне, что это моя ошибка или могли бы решить эту проблему. Спасибо.

ответ

8

Как отмечалось в другом ответе, ваш код Java определяет то же имя присоединиться колонки для двух полей, которые не могут работать.

Если это Java-код генерируется с помощью инструмента NetBeans отображения, как кажется записную

Теперь отображение я сделал с помощью Netbenas и дал мне следующий код ...

Плохое сопоставление Java, вероятно, вызвано плохой комбинацией ограничений в вашем SQL.

Вы имеете в своем определении photo таблицы:

CONSTRAINT fk_photo_activity FOREIGN KEY (fid_module) 
     REFERENCE activity (id_activity) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION, 
    CONSTRAINT fk_photo_event FOREIGN KEY (fid_module) 
     REFERENCE event (id_event) MATCH SIMPLE 
     ON UPDATE NO ACTION ON DELETE NO ACTION 

, который пытается сделать столбец fid_module внешний ключ, ссылающийся activity, а также внешний ключ ссылки event, которые не могут работать.

Если вам нужны внешние ключи от photo к обеим из этих таблиц, вам нужно использовать два разных столбца.

+0

Спасибо вам за ответ. то у меня будет этот римейк моей базы данных? Tnank .. – rodrixd

+0

Да. Я не думаю, что один столбец может быть внешним ключом для двух разных таблиц. –

11

Вы два столбца отображаются с тем же именем

@JoinColumn(name = "fid_module", referencedColumnName = "id_activity") 
@JoinColumn(name = "fid_module", referencedColumnName = "id_event") 

Изменение одного имени атрибута!

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

Repeated column in mapping for entity 
+1

+1: Я думаю, что он генерирует эту Java, а корень проблемы в DDL, но это определенно правильно. –

+0

У вас есть причина, что имя attibutes одно и то же, но проблема в том, что мне нужно, чтобы столбец фотографии с ссылкой на таблицы: событие и активность, как я мог это сделать в сопоставлении? – rodrixd

+0

Редизайн вашего db .. – gipinani

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

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