我遗漏了哪些Hibernate注释?

时间:2013-07-27 02:39:28

标签: 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#personNamePersonName表中作为嵌入式users对象保留?换句话说,User是一个实体,包含PersonName作为嵌入对象(非实体)。

此外,我还缺少任何其他明显的注释?提前谢谢!

2 个答案:

答案 0 :(得分:3)

您可以查看文档中的标题2.2.2.4. Embedded objects (aka components)

http://docs.jboss.org/hibernate/annotations/3.5/reference/en/html_single/#entity-mapping-property

答案 1 :(得分:3)

根据用户@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;

// ...

希望这有帮助!