ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

java – 我缺少什么Hibernate注释?

2019-08-25 16:17:34  阅读:202  来源: 互联网

标签:java mysql orm hibernate annotations


我是Hibernate的新手,我正在尝试使用一个相当简单的Hibernate代码片段.阅读完教程后,我完全窒息了完整的实现.

首先,当涉及到hbm2ddl.auto属性时,我将其设置为验证,因为我只是不喜欢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)
);

这对应于我的应用程序代码中的以下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,mysql,orm,hibernate,annotations
来源: https://codeday.me/bug/20190825/1720491.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有