【问题标题】:What Hibernate annotations am I missing?我缺少哪些 Hibernate 注释?
【发布时间】:2013-07-27 10:53:10
【问题描述】:

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

首先,当涉及到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 被持久化为users 表中的嵌入式PersonName 对象?换句话说,User 是一个实体,并且包含一个 PersonName 作为嵌入对象(非实体)。

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

【问题讨论】:

    标签: java mysql hibernate orm annotations


    【解决方案1】:

    正如用户@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;
    
    // ...
    

    希望这会有所帮助!

    【讨论】:

    • @TicketMonster 如果它解决了您的问题,请接受答案。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2013-09-17
      • 1970-01-01
      • 2019-09-07
      • 1970-01-01
      • 1970-01-01
      • 2011-08-08
      • 2019-05-06
      • 2017-09-06
      • 2011-01-12
      相关资源
      最近更新 更多