2016-08-03 138 views
0

我是JPA新手,我有可能愚蠢的問題;)JPA - 使用類作爲一個實體並且可以一次嵌入?

Node是代表一些博客帖子的類。

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

我想在不同的表中刪除節點的歸檔(我不想惹nodes表使用deleted標誌移除的節點)。存檔條目應該有其他字段:DateTime deletedAt,String deletedBy也許還有別的。

是否有可能作出下列方式一類ArchivedNode

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

?或者,也許有更好的解決方案來存檔實體在不同的表格中?

+0

你不能直接做,因爲如果某件事是一個實體,那麼它有一個「ID」,而一個嵌入式對象沒有。例如,您可以擁有一個節點,其中包含可提供節點所有字段的Embeddable,然後將該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()方法時,請將您要刪除的Node轉換爲ArchivedNode,並將ArchivedNode保存到archived_nodes表中。

另外,在ArchivedNode內的Node應該是@OneToOne單向關係。

... 
@OneToOne 
@JoinColumn(name="id") 
private Node node; 
... 
相關問題