2016-08-03 2 views
0

저는 JPA 초보자이고 어쩌면 어리석은 질문이 있습니다.)JPA - 클래스를 엔터티로 사용하고 한 번에 임베드 할 수 있습니까?

블로그 게시물을 대표하는 클래스가되도록하자.

@Entity 
@Table(name="nodes") 
public class Node { 
    @Id 
    @GeneratedValue 
    private long id; 
    private String title; 
    private String body; 
} 

내가 별도의 테이블에서 삭제 된 노드의 아카이브를 만들고 싶어 (I는 엉망 deleted 플래그를 사용하여 제거 된 노드 nodes 테이블을 원하지 않는다). 보관 항목에는 추가 입력란 인 DateTime deletedAt, String deletedBy 등이 있어야합니다.

@Table(name="archived_nodes") 
@Entity 
public class ArchivedNode { 
    private DateTime deletedAt; 
    private String deletedBy; 
    // ... 
    @Embedded 
    private Node node; 
} 

:

다음과 같은 방법으로 클래스 ArchivedNode을 할 가능성이 있습니까? 아니면 엔티티를 별도의 테이블에 보관하는 것이 더 나은 솔루션일까요?

+0

개체가 엔터티 인 경우 "id"가 있고 포함 된 개체가 없으므로 직접 적용 할 수 없습니다. 예를 들어 노드의 모든 필드를 제공하는 Embeddable을 가진 Node를 가질 수 있으며 Embeddable 객체도 ArchivedNode에 저장하게 할 수 있습니다. –

+0

Eclipselink는 소프트 삭제 및 기록 테이블을 지원합니다. https://wiki.eclipse.org/EclipseLink/Examples/JPA/SoftDelete https://wiki.eclipse.org/EclipseLink/Examples/JPA/History 다른 제공자는 비슷한 것을 가져야합니다 – Chris

답변

0

ArchivedNode에 대한 JPA 저장소를 작성하십시오. Node에서 delete() 메서드를 호출 할 때마다 삭제하고자하는 NodeArchivedNode으로 변환하고 ArchivedNode을 archived_nodes 테이블에 저장하십시오.

또한 NodeArchivedNode@OneToOne 단방향 관계 여야합니다.

관련 문제