2016-07-31 2 views
0

자기를 참조하는 "카테고리"엔티티가 있습니다. |자체 참조 엔티티가 두 개의 레코드를 삽입합니다.

: 나는 부모가없는 엔티티를 저장하면

@Entity 
public class Category extends NamedEntity { 

    private String slug; 

    private int position; 

    @ManyToOne(cascade = { CascadeType.PERSIST }) 
    private Category parent; 

    @OneToMany(mappedBy = "parent") 
    private Set<Category> children = new HashSet<Category>(); 

    ... getters/setters ... 

, 그것은 "이"기록 삽입 ID | NAME | 위치 | SLUG | PARENT_ID |

| 1 | 1 | 1 | 1 | 2 |

| 2 | null | 0 | null | null |

PARENT_ID가 null 인 "one"레코드를 삽입하려고했지만 레코드 (id = 2)와 레코드 (id = 1)를 자식으로 삽입합니다.

public interface CategoryRepository extends Repository<Category, Long> { 
    public Category findById(Long id) throws DataAccessException; 
    public Category save(Category category) throws DataAccessException; 
} 

답변

0

다음에 parent에 대한 당신의 매핑을 변경하고하지 않습니다 :

나는 스프링 데이터 JPA 인터페이스 API를 사용하여 기록을 저장합니다.

@ManyToOne 
private Category parent; 

이 동작을 관찰 할 이유는 CascadeType.PERSIST가 최대 절전 모드 단지 null'd 부모와 자식 레코드를 만드는 대신 당신을 위해 비어있는 새 범주를 만들 것입니다.

+0

계단식 옵션을 제거하면''TransientPropertyValueException'' 예외가 발생합니다. 그래서'''CascadeType.PERSIST'''를 넣었습니다. 예외 설명은'''객체가 저장되지 않은 임시 인스턴스를 참조합니다. 이전의 임시 인스턴스를 저장합니다. '' 감사합니다. – nasiajai

+0

명시 적으로 값을 'null'로 설정하면 불평해서는 안됩니다. – Naros

+0

나는 그 결과가 똑같다고 말하면서 유감입니다. – nasiajai

관련 문제