2016-07-03 2 views
0

나는 이것이 전에 물어볼지도 모른다는 두려움이 있지만 비슷한 질문에 대한 답을 찾지 못하거나 이해하지 못하고있다. JPA OneToOne 관계 자동 생성

나는 테이블 서류에 내가 자동으로 서류를 만들 수있다하려는 offerte의 생성시 OneToOne 연결이이 하나 개의 테이블 offerte

@Entity 
public class Offerte extends BaseEntity{ 

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

있습니다.

@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', 

는이 관계가 자동으로 유효 할 수 있나요 점점 계속?

편집

강의 제안 자바 솔루션

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

offerte 당신이 새로운 서류 개체를 만들 때마다 만든하기 위해서는 다음과 같은 오류

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

당신이 설명해주십시오 수 offerte 개체를로드 및 서류를 초기화합니다 열 이름이있는 관련 테이블? –

+0

정확히 어떻게 @Column (name = "dossier, ... annotation? @OneToOne 관계에서 허용되지 않은 원인.이 관계에 대한 두 개의 열 이름은 단지 서류 일 뿐이며 offer – turoni

+0

GeneratedValue는 불법입니다. 관계 필드에서 ... Long, Integer, String 등 –

답변

0

을 제공합니다 - 당신은 그냥 드롭한다 자바 솔루션 :

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

이 다음과 같은 결과가됩니다 새로운 Dosier 객체가 offerte 변수 (생성자를 호출하여) 생성 될 때마다

  • 새로운 Offerte 개체 건설의 일환으로 채워됩니다. 당신이 Dosier 그것이 offerte 객체를 저장할 것처럼 만들어 저장하면
  • (즉, 캐스케이드 옵션을위한 기능)
  • 때 생성 된 서류를로드 - JPA가 제대로
+0

역함수를 수행하고 객체를 저장하기 전에 수행해야하는 오류가 발생합니다. org.hibernate.TransientPropertyValueException : 일시적인 값을 참조하는 null이 아닌 속성 - 현재 작업 이전에 임시 인스턴스를 저장해야합니다 : be.ugent. lca.data.offerte.dossier -> be.ugent.lca.data.entities.Dossier – turoni

+0

Offerte # dossier 필드에 (cascade = CascadeType.ALL)을 추가했는지 확인하십시오. – river

+0

일대일 연결을 올바르게 매핑하는 데 도움이되는이 [대답] (http://stackoverflow.com/a/10687818/6529383)도 참조하십시오. – river