我缺少哪些 Hibernate 注释?
Posted
技术标签:
【中文标题】我缺少哪些 Hibernate 注释?【英文标题】:What Hibernate annotations am I missing? 【发布时间】: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
作为嵌入对象(非实体)。
另外,我还缺少任何其他明显的注释吗?提前致谢!
【问题讨论】:
【参考方案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
【讨论】:
以上是关于我缺少哪些 Hibernate 注释?的主要内容,如果未能解决你的问题,请参考以下文章
org.hibernate.HibernateException:缺少列