0

У меня проблема с настройками отношений один для многих. Я хочу создать связь между FindingAid и FindingAidVersion. Я попробовал пример в документации Hibernate и многих примерах в Интернете, но я не знаю, что не так.Hibernate от одного до многих отношений аннотация

FindingAid.java

Public class FindingAid implements Serializable { 
     private String id; 
     .... 
     @OneToMany 
     @JoinColumn(name="id") 
     private Set<FindingAidVersion> listVersion = new HashSet<FindingAidVersion(); 
     ...... generate getter and setter ..... 
    } 

FindingAidVersion.java

 Public class FindingAidVersion implements Serializable { 
      private String id; 
      private Date closeDate; 
      private FindingAid findingAid; 
      ....... 
      @ManyToOne 
      @JoinColumn(name = "id", nullable = false) 
      public FindingAid getFindingAid() { 
       return findingAid; 
      } 
     ...... generate getter and setter ..... 
     } 

код приложения:

FindingAid data = new FindingAid(); 
    data.setCreateDate(new Date()); 
    data.setName("daniel"); 

    FindingAidVersion verse = new FindingAidVersion(); 
    verse.setCloseDate(new Date()); 
    verse.setIsClose(false); 


    data.getListVersion().add(verse); 
    this.getSession().save(data); 

    this.getTx().commit(); 

Ошибка: Повторные столбец отображения для объекта: cz.tacr.elza.api.model.FindingAidVersion столбца: идентификатор (должен быть сопоставлен со вставкой = «ложь» обновление = «ложь»)

Я знаю, эта проблема находится в аннотации @JoinColumn, но я потерян.

Спасибо за ваши предложения.

+0

Вы можете добавить insert = "false" update = "false" в отображение FindingAidVersion и попробуйте, потому что об этом говорит ошибка. –

+1

'@ OneToMany' не должен сопровождаться' @ JoinColumn'. Вместо этого вы должны использовать: '@OneToMany (mappedBy =" findAid ")' –

ответ

0

Вы пытались сделать то, что предлагает сообщение об ошибке?

@JoinColumn(name = "id", nullable = false, insert=false, update=false) 

И в FindindAid для listVersion атрибута попробовать

@OneToMany(mappedBy="findingAid") 

Посмотрите на вашей новой ошибки:

foreign key constraint "fk_3o68boae9f3oamcm6dfy77tfw" cannot be implemented Detail: Key columns "findingaid" and "id" are of incompatible types: bytea and character varying 

На одном столе (finding_aid_version) у вас есть "findingAid BYTEA" и на other (find_aid) "id varchar (255)",

+0

** Я пробовал ваше решение, но теперь он показывает эту ошибку: ** '2015-08-06 18: 14: 11.134 ОШИБКА 8928 --- [nio-8080-exec-1] org.hibernate.tool.hbm2ddl.SchemaExport: HHH000389: Неудачный: изменить таблицу find_aid_version добавить ограничение FK_3o68boae9f3oamcm6dfy77tfw внешний ключ (findAid) ссылки find_aid 2015-08-06 18: 14: 11.135 ERROR 8928 --- [nio-8080-exec-1] org.hibernate.tool.hbm2ddl.SchemaExport: ОШИБКА: ограничение внешнего ключа «fk_3o68boae9f3oamcm6dfy77tfw» не может быть реализовано Подробнее: Ключевые столбцы «findaid» и «id» несовместимы типы: bytea и character differenting. ' –

+0

вы можете разместить свой сценарий db? –

+0

'Hibernate: создать таблицу finding_aid ( ID VARCHAR (255) NOT NULL, дата date_create не равно нулю, is_delete булево, имя VARCHAR (100) NOT NULL, первичный ключ (идентификатор) ) Hibernate: создать таблица finding_aid_version ( ID VARCHAR (255) NOT NULL, date_close дата не нулевой, findingAid BYTEA, is_close булево не равно нулю, первичный ключ (идентификатор) ) Hibernate: альтер таблица finding_aid_version в dd ограничение FK_3o68boae9f3oamcm6dfy77tfw внешний ключ (findAid) ссылки found_aid' –

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