2016-07-03 2 views
0

Я боюсь, что это, возможно, было задано раньше, но я либо не нахожу, либо не понимаю ответ на подобные вопросы.JPA OneToOne отношение автоматическое создание

У меня есть этот один стол Offerte

@Entity 
public class Offerte extends BaseEntity{ 

    @OneToOne(fetch=FetchType.LAZY) 
    @JoinColumn(name="dossier") 
    @GeneratedValue(strategy = GenerationType.AUTO) 
    @NotNull 
    private Dossier dossier; 

То есть соединение OneToOne к столу досье и на создание Offerte я хочу, чтобы автоматически досье создано.

@Entity 
public class Dossier extends BaseEntity{ 

    @OneToOne(fetch=FetchType.LAZY, mappedBy="dossier") 
    @NotNull 
    private Offerte offerte; 

Я пытался сделать это с generationtype авто, но я продолжаю получаю нарушение

List of constraint violations:[ 
ConstraintViolationImpl{interpolatedMessage='may not be null', 

Можно ли сделать эти отношения автоматически действуют?

EDIT

предложили реки ява решения

@Entity 
public class Offerte extends BaseEntity{ 
    @OneToOne(fetch=FetchType.LAZY, cascade = CascadeType.ALL) 
    @JoinColumn(name="dossier") 
    @NotNull 
    private Dossier dossier = new Dossier(); 

дает следующее сообщение об ошибке

javax.validation.ConstraintViolationException: Validation failed for classes [be.ugent.lca.data.entities.Dossier] during persist time for groups [javax.validation.groups.Default, ] 
List of constraint violations:[ 
ConstraintViolationImpl{interpolatedMessage='may not be null', propertyPath=offerte, rootBeanClass=class be.ugent.lca.data.entities.Dossier, messageTemplate='{javax.validation.constraints.NotNull.message}'} 
] 
+0

Не могли бы вы описать связанных таблиц с именами столбцов? –

+0

Как вы имеете в виду именно то, что @Column (name = "dossier, ... annotation ?, потому что это не было разрешено с отношением @OneToOne. Также имена двух столбцов для этих отношений - только досье и предложение – turoni

+0

GeneratedValue является незаконным в поле отношения ... это для Long, Integer, String и т. д. –

ответ

0

Для того, чтобы быть Offerte созданного всякий раза, когда вы создаете новый объект досье - вы должны просто упасть до java-решения:

public class Dosier { 
    @OneToOne(cascade = CascadeType.ALL) 
    @NotNull 
    private Offerte offerte = new Offerte(....); 
} 

Это будет иметь следующие последствия:

  • Всякий раз, когда новый объект Dosier создается (вызов конструктора) переменной Offerte будет заполняться в рамках строительства нового объекта с Offerte.
  • При сохранении Dosier создан так она сохранит Offerte объект (это то, что вариант каскада для)
  • При загрузке созданного досье - JPA загрузит Offerte объект и инициализирует досье правильно
+0

Я хочу сделать обратное и получить сообщение об ошибке, которое должно быть выполнено до сохранения объекта: org.hibernate.TransientPropertyValueException: Непустое свойство ссылается на переходное значение - переходный экземпляр должен быть сохранен до текущей операции: be.ugent. lca.data.entity.Offerte.dossier -> be.ugent.lca.data.entities.Dossier – turoni

+0

Убедитесь, что вы добавили (cascade = CascadeType.ALL) в поле Досье Дополнения #. – river

+0

Также посмотрите на этот [ответ] (http://stackoverflow.com/a/10687818/6529383), чтобы помочь вам в правильном сопоставлении взаимно-однозначной ассоциации. – river

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