Entity Bean (1) [转]

 
Entity Bean 非常简单,比起普通的 java bean 仅仅 多了些注释
 
注:entity bean 需要在网络上传送时必须实现Serializable 接口,否则将引发java.io.InvalidClassException例外。
 
 
@Entity 指明这是一个Entity Bean
 
@Table 指定了 entity bean 所要映射的数据库表,其中 @Table(name=”XXX”) 用来指定映射表的表名。如果 @Table 没有使用name属性,系统默认采用类名作为映射表的表名
 
@Column 定义了将成员属性映射到关系表中的哪一列和该列的一些结构信息(如列名是否
唯一,是否允许为空,是否允许更新等 ),他的属性介绍如下:
· name : 映射的列名。如:映射 Person 表的 PersonName 列,可以在 name 属性的 getName 方法上面加入 @Column(name = "PersonName") ,如果不指定映射列名,容器将属性名称作为默认的映射列名。
· unique : 是否唯一
· nullable : 是否允许为空
· length : 对于字符型列, length 属性指定列的最大字符长度
· insertable : 是否允许插入
· updatable : 是否允许更新
· columnDefinition : 定义建表时创建此列的 DDL
· secondaryTable : 从表名。如果此列不建在主表上(默认建在主表),该属性定义该列所在从表的名字。
 
@Id 指定表的主键。
 
@GeneratedValue 定义了ID的生成方式 ,它可以有下列多种生成方式
 
· TABLE :容器指定用底层的数据表确保唯一。例子代码如下:
 
@TableGenerator (name= " Person_GENERATOR " , // 为该生成方式取个名称
table= "Person_IDGenerator" , // 生成ID的表
pkColumnName= "PRIMARY_KEY_COLUMN" , // 主键列的名称
valueColumnName= "VALUE_COLUMN" , // 存放生成ID值的列的名称
pkColumnValue= " personid " , // 主键列的值(定位某条记录)
allocationSize=1) // 递增值
 
@Id
@GeneratedValue (strategy=GenerationType. TABLE , generator= " Person_GENERATOR " )
public Integer getPersonid() {
return personid ;
}
 
· SEQUENCE :使用数据库的 SEQUENCE 列来保证唯一 (Oralce 数据库通过序列来生成唯一 ID) ,例子代码如下:
@ SequenceGenerator(name= "Person_SEQUENCE" , // 为该生成方式取个名称
sequenceName= "Person_SEQ" ) //sequence 名称(若不存在,会自动生成)
public class Person implements Serializable{
@Id
@GeneratedValue (strategy=GenerationType. SEQUENCE , generator= "Person_SEQ" )
public Integer getPersonid() {
return personid ;
}
 
 
· IDENTITY :使用数据库的 INDENTIT 列来保证唯一 ( mysql sqlserver 数据库通过自增长来生成唯一 ID)
 
· AUTO :由容器挑选一个合适的方式来保证唯一 ( 由容器决定采用何种方式生成唯一主键, hibernate 会根据数据库类型选择适合的生成方式,相反 toplink 就不是很近人情 )
 
· NONE :容器不负责主键的生成,由调用程序来完成。
 
 
@Temporal 用来指定 java.util.Date java.util.Calendar 属性与数据库类型 date,time timestamp 中的那一种类型进行映射。
 
@Temporal 有三种类型:
DATE , // 代表 date 类型
TIME , // 代表时间类型
TIMESTAMP // 代表时间戳类型
  
例如:
@Temporal (value=TemporalType. DATE )
public Date getBirthday() {
return birthday ;
}
 
Jboss 中可以缺少 @Temporal 注释,但在使用了 TopLink 的服务器中,缺少该注释将会导致部署失败。 @Temporal 注释的默认值为: TIMESTAMP
@Transient 如果不想让一些成员属性映射成数据库字段,我们可以使用 @Transient 注释进行标注,下面的 fullName 属性将不会被持久化成数据库字段
@ Transient
public String getFullName() {
return firstName + , + lastName;
}
 
 
@Enumerated 如果想映射枚举对象到数据库就需要使用 @Enumerated 注释进行标注。如:
public enum CommentType {
NEWS { public String getName(){ return " 资讯评论" ;}},
PRODUCT { public String getName(){ return " 产品评论" ;}};
public abstract String getName();
}
 
   Public class EntityBeanA{
@Enumerated(EnumType. STRING )
public CommentType getType() {
return type ;
}
         。。。
   }
 
 
@Lob 有些时候你可能需要存放一些文件或大文本数据进数据库(例如在做新闻系统时,我们通常会使用到大文本数据), JDBC 使用 j ava.sql.Blob 类型存放二进制数据, java.sql.Clob 类型存放字符数据 ,这些数据都是非常占内存的, @Lob 注释用作映射这些大数据类型当属性的类型为 byte[], Byte[] java.io.Serializable 时, @Lob 注释将映射为数据库的 Blob 类型,当属性的类型为 char[], Character[] java.lang.String 时, @Lob 注释将映射为数据库的 Clob 类型
 
例子:
@Lob
@Basic(fetch=FetchType.LAZY)
public String getContent() {
return content ;
}
 
 
@Basic 对于加了 @Lob 注释的大数据类型 ( 有时存放的可能是 10M 以上的数据 ) ,为了避免每次加载实体时占用大量内存,我们有必要对该属性进行延时加载,这时我们需要用到 @Basic 注释。
   
 
 
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值