我是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
作为嵌入对象(非实体)。
此外,我还缺少任何其他明显的注释?提前谢谢!
答案 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;
// ...
希望这有帮助!