文档介绍:EJB实体
@
课程简介
单表映射实体bean
实体对象管理器
多对一双向关联的映射
一对一关系的映射
多对多关系的映射
继承关系的映射
单表实体bean映射示例
实体bean对应实体域对象。
实体bean需要实现Serializable接口。
实体bean使用***@。
***@Table注释用于指定实体映射的数据库表,其中name属性指定表名。
Column注释
***@Column注释用于指定实体属性映射表的列其属性:
name指定对应的列名,缺少时与属性名一致。
unique指定是否唯一
unllable指定是否充许为空
length对于字符型可指定最大长度
insertable是否充许插入
updateable是否充许更新
columnDefinition指定自动建表时产生该列时附加的DDL,例:int not null
secondaryTable用于一个实体映射到多个表时使用,此处指定映射的从表名
Id 和 GeneratedValue注释
***@Id注释指定了实体属性为表的主键
***@GeneratedValue其strategy属性定义一标识符产生的方式:
其定义在:
AUTO:容器指定用底层的数据表确保唯一。
SEQUENCE:使用数据库的SEQUENCE 列来保证唯一
IDENTITY:使用数据库的INDENTIT列来保证唯一
AUTO:由容器挑选一个合适的方式来保证唯一
NONE:容器不负责主键的生成,由调用程序来完成
建立访问实体bean的会话bean
实体bean由EJB持久化实体管理器(EntityManager)负责管理,它可用于产生,获取,删除实体bean。
另外也可以通过EJB查询语言EJB QL查找实体bean。
实体bean被实体管理器管理时,实体管理器会跟踪实体的状态,在任何决定更新的时候会把实体中的数据更新到关系数据库中。当实体从实体管理器分离后,实体管理器将无法跟踪其状态。
一个EJB工程可以有多个实体管理器,它们一般分别对应不同的关系数据库。
。
在bean中可通过***@PersistenceContext来注入实体管理器的引用,当有多个实体管理器时可通过unitName属性来指定。
示例:CustomerDao 客户端:testCustomerDao
实体管理器的持久化操作方法
find(),getReference()根据实体对象的OID加载实体。当实体不存在时getReference会抛出异常,而find返回null。
persist():添加一个实体。
merge():合并实体到实体管理器,如果EntityManager中存在OID与当前实体一致的实体对象将当前的实体对象的数据更新到EntityManager中的实体中去,然后返回当前实体,当前实体本身并不在实体管理器中,如果EntityManager中没有OID与实体一致的对象,将拷贝当前实体对象到管理器中,返回当前实体对象。
实体管理器的持久化操作方法
remove():删除一个实体对象。
createQuery():用于执行EJB QL语句
createNativeQuery():执行关联的SQL语句。
refresh():刷新一个实体。
contains():检查一个实体是否在管理器中,在管理器中的实体,管理器能自动实现与数据库数据的同步。
flush():人为清理缓存,管理器将执行所有更新。
clear():分离所有的实体对象。注意:如果实体被更新过而直接调用该方法,所有的更新将会丢失。好的方法是调用该方法之前先调用flush。
setFlushMode():用于改变更改清理缓存的模式,MIT两种分别对应容器自动提交或在提交事务时提交。
建立实体之间多对一双向关联
首先需要建立域对象中表示关联关系的属性。
***@OneToMany用于指定一对多的关系,应当指定在一个集合属性上
targetEntity用于指定被关联的实体类
cascade指定级联的级别
PERSIST新加级联
MERGE更新级联
REMOVE删除级联
REFRESH重载级联
ALL包括所有情况
FetchType指定装载数据的策略
EAGER立即装载
LAZY延迟装载
mappedBy指定被关联类中与当前类关联的属性名,在双向关联中需要使用
建立实体之间多对一双向关联
***@ManyToOne用于指定多对一关联,应当指定在一个关联对象的引用属性上
其中targetEntity,cascade,oMany相同
optional指定