JPA Hibernate 将类中的类中的字段映射到同一个表

Posted

技术标签:

【中文标题】JPA Hibernate 将类中的类中的字段映射到同一个表【英文标题】:JPA Hibernate map fields from class within class to same table 【发布时间】:2018-04-30 14:37:00 【问题描述】:

我有一个“审计”类,它将包含有关实体的以下详细信息:

创建时间 由哪个应用程序用户创建 时间更新 由哪个应用程序用户更新

在数据库中,这些字段与实体属性存储在同一个表中。例如,

USER 表:

CREATE TABLE USERS (
    id                  BIGINT          NOT NULL    AUTO_INCREMENT,
    display_name        VARCHAR(30)     NOT NULL,

    active              BOOLEAN         NOT NULL    DEFAULT FALSE,

    created_time        TIMESTAMP       NOT NULL    DEFAULT CURRENT_TIMESTAMP,
    created_user        BIGINT          NOT NULL    DEFAULT 0,
    updated_time        TIMESTAMP       NOT NULL    DEFAULT 0,
    updated_user        BIGINT          NOT NULL    DEFAULT 0,

    PRIMARY KEY (id)
);

用户类:

@Entity(name="USER")
@Table(name="USERS")
public class User implements Audited 

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="ID", nullable=false, updatable=false)
    private long id;

    @Column(name="DISPLAY_NAME", nullable=false)
    @NotNull
    @Size(min=5, max=30)
    private String displayName;

    @Column(name="ACTIVE", nullable=false)
    @NotNull
    private boolean active;

    private Audit audit;

审计类:

public class Audit 

    private Date createdTime;

    private User createdByUser;

    private Date updatedTime;

    private User updatedByUser;

在每个实体表上,审计字段的名称都相同。映射这些字段的最佳方法是什么?

【问题讨论】:

【参考方案1】:

最好的方法是将Audit 类作为@Embeddable 实体并在您的所有实体中将其用作@Embedded 属性,这几乎是您目前正在做的事情。

【讨论】:

以上是关于JPA Hibernate 将类中的类中的字段映射到同一个表的主要内容,如果未能解决你的问题,请参考以下文章

JPA 表继承和对象映射

JPA的入门CRUD

Hibernate:在我的类中添加一个未映射到数据库表的属性

JPA实体类中的注解

使休眠忽略未映射的类变量[重复]

关于hibernate注解方式的实体类映射