关闭

EJB3.0 实体bean 简析

792人阅读 评论(0) 收藏 举报
直接切入正题:实体bean的注记:
1:@Entity 表明这是一个实体bean
2:@Table 注释的name 属性指定映射的数据表的名称
3:@Column 注释定义了映射到列的所有属性
       column的几个属性:name 指定映射的列名
                                        unique 是否唯一
                                        length 对于字符型列
                                        insertable 是否允许插入
                                        updateble 是否允许更新
                                        columnDefinition  定义建表时创建此列的DDL
                                        secondaryTable 从表名 不在主表上建立此列。属性定义在从表里的名字
4:@Id 指定表的主键。它有多种生成方式
      Table 容器指定用底层的数据表确保唯一
      sequence 使用数据库的identity列来确保唯一
      identity 使用数据库的identity 列来保证唯一
      auto 由容器挑选一个合适的方式来保证唯一
     none 容器不管理主键。有程序控制
 5:@GeneratedValue 表示定义了标识字段的生成方式
另外实体bean一定要继承serializable 接口。这是ejb的工作性质决定的。ejb 是通过scoket 网络流来实现分布式的所以需要序列化。
EntityManager 是由EJB容器自动地管理和配置的。不需要用户自己创建。它用来操作实体bean 在类中 不用显示的进行赋值。可以直接使用。因为实体bean 加载时,容器会通过注释@persistenceContext 动态注入 EntityManager对象 另注:properties 里可以指定 数据表的建立和销毁时间。
6:@PersistenceContext 的属性 unitName 可以指定不同的持久化内容。
下面介绍下 持久化实体管理器 EntityManager
顾名思义 就是用来对实体bean 进行操作的辅助类。他可以用来产生,删除持久化的实体bean,通过主键查找实体bean,也可以通过EJB3QL语言查找满足条件的实体bean。实体bean被EntityManager管理时,EntityManager跟踪实体bean的状态改变,EntityManager的获取通过@oersistenceContext 注释由EJB容器动态注入(某种程度说来说。他的使用比hibernate 还要方便些 ,而且使用方式和hibernate的session 差不多)
EntityManager 的 几个常用方法:
1:通过实体的主键(也就是唯一标识符)我们可以通过find()或者getReference()方法来获得Entity ,当数据库没有你查找的记录时,find 会返回null。而getReference 会抛出EntityNotFoundException异常。另外 getReference 方法不保证实体bean 已经初始化
2:添加 persist 方法 参数就是实体bean。调用改方法插入数据
3:更新 Merge 参数同样是 实体bean  因为实体bean 有2中状态。所以我决定用hibernate的说法来解释下。
 当 实体bean 是持久对象时候(你用find 查询出来。不em.clear 这时候的状态就是持久对象)其代码如下
Person person = em.find (Person.class,1);
person.setName("aaa");
em.merge(person);
当实体bean 不是持久对象 也就是游离对象。更多的时候应该是临时对象。其代码如下:
em.merge(person);
牢骚几句:不晓得sun怎么想的。持久化对象还要调用merge 方法。明显多余哈。而且merge 处理 临时对象时 貌似hibernate的 saveorupdate 方法有相同id的实例会更新。没有会自动插入数据
4:删除 Remove 删除实体bean
     删除的时候实体一定是持久对象。这也很好理解哈。数据库都没有。你删什么东西哈。
    如果级联关系 cascade = cascadeType.All 或者 cascadeType.Remove 时候 则级联删除所有的对象。
接下来是重头戏了。EJB3QL 查询语句 相当于hibernate的hql  。。。。。。明天再更新吧。睡觉去了。
 
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:11001次
    • 积分:231
    • 等级:
    • 排名:千里之外
    • 原创:12篇
    • 转载:1篇
    • 译文:0篇
    • 评论:2条
    文章分类