1

자체 엔티티에 일대일 매핑을 추가하는 방법. 이 예와 같습니다. 나는 그 사람 자신을위한 부모 - 자식 관계를 원한다. 이 경우 @OneToOne를 사용하려면 왜 이해가 안 돼요,최대 절전 모드에서 자체 엔티티에 대해 @onetoone 매핑을 추가하는 방법

@Entity 
@Table(name="PERSON") 
public class Person { 

    @Id 
    @Column(name="person_id") 
    private int id; 

    @OneToOne 
    @JoinColumn(name = "parent_person_id") 
    private Person parentPerson; 

    @OneToOne(mappedBy = "parentPerson") 
    private Person childPerson; 
} 

그러나 다음은

@Entity 
@Table(name="PERSON") 
public class Person { 

@Id 
@Column(name="personId") 
private int id; 

@OneToOne 
@JoinColumn() 
private Person parentPerson; 
} 
+0

무슨 뜻인지 경우. 뭐가 문제 야? –

+0

@PauliusMatulionis 예, 나는 백엔드 mysql 테이블 스키마를 보았습니다. 새 필드가 "parentPerson_id"로 생성되었습니다. 어떻게 내 서비스 메소드에서 추가 할 수 있습니까? –

답변

3

양방향 자동 매핑 @OneToOne (나는 SQL 표기법에 열 이름을 변경)의 예이다.

+0

실제로 모든 사람은 단 하나의 부모 만 가질 수 있습니다. 자기 참조 엔티티와 부모 - 자식 관계를 만들고 싶습니다. –

0

내가 이런 식으로 사용하고 있습니다 : 서비스 레이어에서 부모를 추가하기 위해

@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL) 
@JoinColumn(name = "PARENT_ID", nullable = true) 
private Person parent; 

, 당신은 필요에 이미 데이터베이스에 하나 이상의 Person 있습니다.

할 수 있습니다. 그런 다음 새로운 사람을 만듭니다. 예컨대 :

@Transactional 
public void createPerson() { 
    Person parent = //get your parent 
    Person child = new Person(); 
    if (parent != null) { 
     child.setParent(parent); 
    } 
} 

를 들어 이것은 당신이 ... 당신은 이미 한

+0

기본값은 이미 OneToOne에 대해 EAGER이기 때문에 fetch = FetchType.EAGER를 지정할 필요가 없습니다. – webyildirim