java - 我缺少哪些 Hibernate 注释?

标签 java mysql hibernate orm annotations

我是 Hibernate 的新手,我正在尝试让一个相当简单的 Hibernate 代码片段工作。阅读教程后,我对完整的实现完全感到窒息。

首先,当涉及到 hbm2ddl.auto 属性时,我将其设置为 validate 因为我不喜欢 Hibernate 创建我的想法表结构(我是老式的;也许随着我对 Hibernate 越来越熟悉,这种情况会改变)。无论如何,这是我刚刚在 MySQL 服务器上创建的表:

CREATE TABLE users (
    id                      INT NOT NULL AUTO INCREMENT,
    email                   VARCHAR(200) NOT NULL,
    title                   VARCHAR(25),
    first_name              VARCHAR(100),
    middle_name             VARCHAR(100),
    last_name               VARCHAR(100),
    suffix                  VARCHAR(100),

    PRIMARY KEY (id)
);

Thise 对应于我的应用程序代码中的以下 POJO/实体:

@Entity
@Table(schema="my_db", name="users")
public class User {
    @Id @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="id")
    private Integer id;

    @Column(name="email")
    private String email;

    // ???
    private PersonName personName;

    public User(final String email, final PersonName personName) {
        super();

        setEmail(email);
        setPersonName(personName);
    }

    // Getters and setters omitted for brevity...
}

public abstract class BaseName {
    public abstract String toName();

    @Override
    public String toString() {
        return toName();
    }
}

public class PersonName extends BaseName {
    private String title;
    private String firstName;
    private String middleName;
    private String lastName;
    private String suffix;

    public PersonName(final String title, final String firstName, final String middleName, final String lastName, final String suffix) {
        super();

        setTitle(title);
        setFirstName(firstName);
        setMiddleName(middleName);
        setLastName(lastName);
        setSuffix(suffix);
    }

    // Getters and setters omitted for brevity...
}

我需要添加哪些注解/配置,以便 User#personName 作为嵌入的 PersonName 对象持久保存在 users 表中?换句话说,User 是一个实体,包含一个 PersonName 作为嵌入对象(非实体)。

此外,我还遗漏了任何其他明显的注释吗?提前致谢!

最佳答案

根据用户@Snow Blind 的建议,Embedded objects是你想要的。

让我们从 PersonName 类开始:

@Embeddable
public class PersonName extends BaseName {
    @Column(name = "title")
    private String title;
    @Column(name = "first_name")
    private String firstName;
    @Column(name = "middle_name")
    private String middleName;
    @Column(name = "last_name")
    private String lastName;
    @Column(name = "suffix")
    private String suffix;

    // ...
}

现在在这里添加@Embedded标签:

// ...

@Embedded
private PersonName personName;

// ...

希望这对您有所帮助!

关于java - 我缺少哪些 Hibernate 注释?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17893722/

相关文章:

java - 服务器端 Java - 从哪里开始

oracle - hibernate oracle 序列产生大的间隙

java - 如何解决 JSR-303 自定义 validator 中的依赖关系

java - Android 添加布局到选项卡

java - JasperReports Jackson 依赖冲突

mysql - 显示表 MySQL 结果的别名

mysql - Rake db :migrate aborted! Ghost开发数据库使用MySQL2吗?

java - 如何在生成数据库模式之后但在应用程序启动之前执行 sql 脚本

java - 删除/替换空子字符串

MySQL 无法添加或更新子行 - 外键约束失败