1.声明实体bean
每一个持久化POJO类都是一个实体bean,这可以通过在类的定义中使用@Entity注解来进行声明:
@Entity public class Flight implements Serializable { Long id; @Id public Long getId() { return id; } public void setId(Long id) { this.id = id; } }通过 @Entity注解将一个类声明为一个实体bean(即一个持久化POJO类)
2. 定义表(Table)
@Table是类一级的注解,通过@Table注解可以为实体bean映射指定表(table),目录(catalog)和schema的名字.如果没有定义@Table,那么系统自动使用默认值:实体的短类名(不附带包名).
@Entity @Table(name="tbl_sky") public class Sky implements Serializable { ...
@Table元素包括了一个schema和一个 catalog属性,如果需要可以指定相应的值.
3.声明列属性
使用 @Column 注解可将属性映射到列.使用该注解来覆盖默认值(关于默认值请参考EJB3规范).在属性级使用该注解的方式如下:
-
不进行注解
-
和 @Basic一起使用
-
和 @Version一起使用
-
和 @Lob一起使用
-
和 @Temporal一起使用
-
和 @org.hibernate.annotations.CollectionOfElements一起使用 (只针对Hibernate )
@Entity public class Flight implements Serializable { ... @Column(updatable = false, name = "flight_name", nullable = false, length=50) public String getName() { ... }
在上面这个例子中,name属性映射到flight_name列.该字段不允许为空,长度为50,并且是不可更新的(也就是属性值是不变的).
4.透明化
实体bean中所有的非static非transient的属性都可以被持久化,除非你将其注解为@Transient.所有没有定义注解的属性等价于在其上面添加了@Basic注解.通过@Basic注解可以声明属性的获取策略(fetch strategy):
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上面这个例子中, counter是一个transient的字段, lengthInMeter的getter方法被注解为 @Transient, entity manager将忽略这些字段和属性.
Annotation:@Temporal(参数) 参数有3种 只显示时间,只显示日期,时间日期都显示
//@Temporal(TemporalType.DATE) 只显示日期
//@Temporal(TemporalType.TIME) 只显示时间
//@Temporal(TemporalType.TIMESTAMP) 显示日期与时间