下面我们看看Kodo EJB中如何调用这两个类完成Book类和BookExtend类的创建、修改、删除工作。
由于篇幅的关系,这些没有讲述如何编译、加强这些类并且准备相应的配置文件来完成整个项目开发环境的建立,这部分的内容请参考我的另外一篇文章《Kodo EJB:符合EJB3规范的持久层框架》
级联新建对象
下面的这段代码演示了只需要调用Book类的persist方法就同时持久化Book类对象和BookExtend类对象的情况。请注意其中用粗体标识出的部分。
/* 获得EJB的实体管理器 */
EntityManagerFactory emf = Persistence.createEntityManagerFactory(null);
EntityManager em = emf
.createEntityManager(PersistenceContextType.EXTENDED);
/* 开始事务 */
em.getTransaction().begin();
/* 创建新的Book对象 */
Book book = new Book();
/* 设置Book对象的name属性 */
book.name = "Kodo入门";
/* 创建新的BookExtend对象 */
BookExtend bookExtend = new BookExtend();
/* 设置对象属性 */
bookExtend.name = "Spring is a very good book that ...";
/* 建立对象之间的关系 */
book.bookExtend = bookExtend;
/* 持久化对象,只需要持久化Book对象,不需要单独持久化bookExtend对象 */
em.persist(book);
/* 结束事务 */
em.getTransaction().commit();
em.close();
emf.close();
级联更新对象状态
下面的这段代码演示了只需要调用Book类的merge方法就同时更新Book类对象和BookExtend类对象状态的情况。请注意其中用粗体标识出的部分。
/* 获得EJB的实体管理器 */
EntityManagerFactory emf = Persistence.createEntityManagerFactory(null);
EntityManager em = emf
.createEntityManager(PersistenceContextType.EXTENDED);
/* 开始事务 */
em.getTransaction().begin();
/* 创建新的Book对象 */
Book book = new Book();
/* 设置Book对象的id属性 */
book.id= 1;
book.name = “Kodo 入门”;
/* 创建新的BookExtend对象 */
BookExtend bookExtend = new BookExtend();
/* 设置对象属性 */
bookExtend.id=1;
bookExtend.name = "Kodo 分为Kodo EJB和Kodo JDO ...";
/* 建立对象之间的关系 */
book.bookExtend = bookExtend;
/* 持久化对象,只需要调用Book对象的merge方法,不需要单独处理bookExtend对象 */
em.merge(book);
/* 结束事务 */
em.getTransaction().commit();
em.close();
emf.close(); 级联删除对象/* 获得EJB的实体管理器 */
EntityManagerFactory emf = Persistence.createEntityManagerFactory(null);
EntityManager em = emf
.createEntityManager(PersistenceContextType.EXTENDED);
/* 开始事务 */
em.getTransaction().begin();
/* 使用查询删除对象,可以不必将对象加入到内存中,提高效率 */
Query q = entityManager
.createQuery("delete from Book c WHERE c.id=:id");
int id = book.id;
/* 设置被删除Book对象的主键值 */
q.setParameter("id", id);
/* 当方法被调用时,Book对象对应的BookExtend对象会同时被删除 */
q.executeUpdate();
/* 结束事务 */
em.getTransaction().commit();
em.close();
emf.close();
Kodo EJB:实现类和类之间的关联关系(5)
时间:2011-03-05 bea 肖菁
其他几种关联关系
一对多
我们可以使用OneToMany注释来描述类和类之间的一对多关系,OneToMany注释有四个属性:targetEntity、mappedBy、cascade和fetch,这四个属性的具体含义和OneToOne注释注释的同名属性一一对应,请大家参考前面章节中的内容。
多对一
我们可以使用ManyToOne注释来描述类和类之间的多对一关系,ManyToOne注 |