快速业务通道

使用Apache OpenJPA开发EJB 3.0应用,第3部分: 实体继承 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
''ba guai'') INSERT INTO Dog (id, sex) VALUES (3, ''MALE'')

从数据库中查询实体对象

在上一章节中我们了解了如何持久化存在继承关系的实体内,并且介绍了 OpenJPA 在处理继承关系时的细节行为,接下来我们将介绍如何从数据库中获取 实体,以及 OpenJPA 在这个过程中对于继承关系处理的细节。

使用Apache OpenJPA开发EJB 3.0应用,第3部分: 实体继承(8)

时间:2011-08-31 IBM 肖菁

获取所有 Animal 对象

我们通过 OpenJPA 中的 Query 接口和 JPQL(Java Persistence Query Language)语言来获取数据库中的记录并且转换为相应的 Java 对象,因此开发 者只需要处理 Java 对象模型即可。下面的代码可以从数据库中获取所有的 Animal 对象,请注意其中粗体的部分。

1. // 通过 Persistence 创建 EntityManagerFactory 2. EntityManagerFactory factory =  Persistence.createEntityManagerFactory( 3.  "jpa-unit", System.getProperties()); 4. // 创建新的 EntityManager 5. EntityManager em2 = factory.createEntityManager(); 6. 7. // 查询所有 Animal 对象 8. Query q = em2.createQuery("select m from Animal m"); 9. 10. // 直接处理 Animal 对象,打印 Animal 对象的信息 11. for (Animal m : (List<Animal>) q.getResultList())  { 12. System.out.println("Animal Object:"); 13. System.out.println(" id:" + m.getId()); 14. System.out.println(" name:" + m.getName()); 15. } 16. 17. // 关闭 EntityManager 和 EntityManagerFactory 18. em2.close(); 19. factory.close();

当我们执行这段代码时,OpenJPA 会将它转化为关系数据库对应的 SQL 查询 语句:

SELECT t0.id, t1.id, t2.id, t0.name, t1.sex,  t2.territory FROM Animal t0 LEFT OUTER JOIN Dog t1 ON t0.id = t1.id LEFT OUTER JOIN Fish t2 ON t0.id = t2.id

在查询结果返回后,OpenJPA 会将查询结果影射到相关的 Animal 对象上,整 个过程是透明的,开发者只需要处理对象模型即可。

获取所有 Fish 对象

Fish 对象的获取和 Animal 对象的获取在 OpenJPA 中大同小异,唯一的区别 是使用 JPQL 不相同,查询 Fish 对象时使用“select fish from Fish fish” 。下面的代码可以从数据库中获取所有的 Fish 对象,请注意其中粗体的部分。

1. // 通过 Persistence 创建 EntityManagerFactory 2. EntityManagerFactory factory =  Persistence.createEntityManagerFactory( 3.  "jpa-unit", System.getProperties()); 4. // 创建新的 EntityManager 5. EntityManager em2 = factory.createEntityManager(); 6. 7. // 查询所有 Fish 对象 8. Query q1 = em2.createQuery("select fish from Fish  fish"); 9. 10. // 打印 Fish 对象的信息 11. for (Fish fish : (List<Fish>) q1.getResultList())  { 12. System.out.println("Fish Object:"); 13. System.out.println(" id:" + fish.getId()); 14. System.out.println(" name:" + fish.getName()); 15.   System.out.println(" territory:" + fish.getTerritory ()); 16. } 17. 18. // 关闭 EntityManager 和 EntityManagerFactory 19. em2.close(); 20. factory.close();

使用Apache OpenJPA开发EJB 3.0应用,第3部分: 实体继承(9)

时间:2011-08-31 IBM 肖菁

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号