快速业务通道

使用Apache OpenJPA开发EJB 3.0应用,第4部分: 实体关联 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
标识出的部分。

/* 获得 EJB 的实体管理器 */ EntityManagerFactory emf = Persistence.createEntityManagerFactory (null); EntityManager em = emf.createEntityManager (PersistenceContextType.EXTENDED); /* 开始事务 */ em.getTransaction().begin(); /* 创建新的 BookExtend 对象 */ BookExtend bookExtend = new BookExtend(); /* 设置对象属性 */ bookExtend.name = "前言 本书重点说明了..."; /* 创建新的 Book 对象 */ Book book = new Book(); /* 设置 Book 对象的 name 属性 */ book.name = "<<Web Services实践>>"; /* 建立对象之间的关系 */ book.bookExtend = bookExtend; /* 持久化对象,只需要持久化 Book 对象,不需要单独持久化 bookExtend  对象 */ em.persist(book); /* 结束事务 */ em.getTransaction().commit(); em.close(); emf.close();

产生的 SQL 语句

下面的这段 SQL 语句是运行上面的代码时 OpenJPA 自动生成的,我们可以从 中看到 OpenJPA 级联新建对象时的处理过程:

-- 创建 Book 实体对应的数据库表 -- CREATE TABLE Book (ID INTEGER NOT NULL AUTO_INCREMENT, NME  VARCHAR(255),   extendID INTEGER, PRIMARY KEY (ID)); -- 创建 BookExtend 实体对应数据库表 -- CREATE TABLE BookExtend (ID INTEGER NOT NULL  AUTO_INCREMET,   NAME VARCHAR(255), PRIMARY KEY (ID)) ; -- 将 Book 实体对象插入数据库中 -- INSERT INTO Book (NAME) VALUES (‘<<Web Services实践 >>’) -- 获取 Book 实体对象的编号 -- SELECT LAST_INSERT_ID(); -- 将 BookExtend 实体对象插入数据库中 -- INSERT INTO BookExtend (NAME) VALUES (‘前言 本书重点说明了... ’) ; --获取 BookExtend 实体对象的编号 -- SELECT LAST_INSERT_ID(); -- 将 BookExtend 实体对象的编号更新到Book表中形成关联关系 -- UPDATE Book SET extendID = 1 WHERE ID = 1;

使用Apache OpenJPA开发EJB 3.0应用,第4部分: 实体关联(7)

时间:2011-08-31 IBM 肖菁

级联更新对象状态

下面的这段代码演示了只需要调用 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 = “OpenJPA入门”; /* 创建新的 BookExtend 对象 */ BookExtend bookExtend = new BookExtend(); /* 设置对象属性 */ bookExtend.id=1; bookExtend.name = "OpenJPA开发EJB3.0应用 ..."; /* 建立对象之间的关系 */ book.bookExtend = bookExtend; /* 持久化对象,只需要调用 Book 对象的 merge 方法,不需要单独处理  bookExtend 对象 */ em.merge(book); /* 结束事务 */ em.getTransaction().commit(); em.close(); emf.close();

级联删除对象

下面的这段代码演示了只需要通过 Query 对象,就可以在删除 Book 类的同 时,删除它对应的 BookExtend 实体对象的情况。请注意其中用粗体标识出的部 分。

/* 获得 EJB 的实体管理器 */ EntityM

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号