简体   繁体   English

JPA-将类用作实体并且可一次嵌入?

[英]JPA - use class as an entity and embeddable at once?

I'm JPA newbie and I have probably stupid question ;) 我是JPA新手,我可能有个愚蠢的问题;)

Let Node be a class representing some blog post. Node为代表某些博客文章的类。

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

I want to make an archive of deleted nodes in separate table (I don't want to mess nodes table with removed nodes using deleted flag). 我想在单独的表中创建已删除节点的存档(我不想使用deleted标志将deleted nodes表弄乱)。 Archive entry should have additional fields: DateTime deletedAt , String deletedBy and maybe something else. 存档条目应具有其他字段: DateTime deletedAtString deletedBy和其他内容。

Is there any possibility to make a class ArchivedNode in the following way: 是否可以通过以下方式创建类ArchivedNode

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

? Or maybe there is a better solution for archiving entities in separate tables? 也许有一个更好的解决方案,可以在单独的表中归档实体?

Create a JPA repository for ArchivedNode . ArchivedNode创建一个JPA存储库。 Each time you wish to call the delete() method on a Node , convert the Node you wish to delete into an ArchivedNode and save the ArchivedNode into the archived_nodes table. 每次你想调用delete()上的一个方法Node ,转换Node要删除到ArchivedNode和保存ArchivedNode到archived_nodes表。

Also, the Node within ArchivedNode should be a @OneToOne unidirectional relationship. 同样, ArchivedNodeNode应该是@OneToOne单向关系。

...
@OneToOne
@JoinColumn(name="id")
private Node node;
...

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM