一。实体 Bean 每个持久化 POJO 类都是一个实体 Bean, 通过在类的定义中使用 @Entity 注解来进行声明。 声明实体 Bean @Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } } @Entity 注解将一个类声明为实体 Bean, @Id 注解声明了该实体 Bean 的标识属性。 Hibernate 可以对类的属性或者方法进行注解。属性对应 field 类别,方法的 getXxx()对应 property 类别。 定义表 通过 @Table 为实体 Bean 指定对应数据库表,目录和 schema 的名字。 @Entity @Table(name="tbl_sky") public class Sky implements Serializable { ... @Table 注解包含一个 schema 和一个 catelog 属性,使用@UniqueConstraints 可以定义表的唯一约束。 @Table(name="tbl_sky", uniqueConstraints = {@UniqueConstraint(columnNames={"month", "day"})} ) 上述代码在 "month" 和 "day" 两个 field 上加上 unique constrainst. @Version 注解用于支持乐观锁版本控制。 @Entity public class Flight implements Serializable { ... @Version @Column(name="OPTLOCK") public Integer getVersion() { ... } } version 属性映射到 "OPTLOCK" 列,entity manager 使用这个字段来检测冲突。 一般可以用 数字 或者 timestamp 类型来支持 version. 实体 Bean 中所有非 static 非 transient 属性都可以被持久化,除非用@Transient 注解。 默认情况下,所有属性都用 @Bas ic 注解。 public transient int counter; //transient property private String firstname; //persistent property @Transient String getLengthInMeter() { ... } //transient property String getName() {... } // persistent property @Basic int getLength() { ... } // persistent property @Basic(fetch = FetchType.LAZY) String getDetailedComment() { ... } // persistent property @Temporal(TemporalType.TIME) java.util.Date getDepartureTime() { ... } // persistent property @Enumerated(EnumType.STRING) Starred getNote() { ... } //enum persisted as String in database...