''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 肖菁
|