技术开发 频道

实体继承

        持久化实体

  使用 OpenJPA 持久化实体的继承关系时,开发者只需要按照面向对象的思想操纵实体即可,无需为实体的继承关系作多余的工作。下面的章节中我们将了解持久化实体 Animal、Fish、Dog 时开发者需要完成的工作以及 OpenJPA 转化后在关系数据库中的实现细节。

  持久化 Animal

  我们可以使用下面的代码段来持久化一个新的 Animal 对象:

1.    // 通过 Persistence 创建 EntityManagerFactory
2.    EntityManagerFactory factory = Persistence.createEntityManagerFactory(
3.            "jpa-unit", System.getProperties());
4.    
5.    // 从 EntityManagerFactory 中创建 EntityManager
6.    EntityManager em = factory.createEntityManager();
7.    
8.    // 开始持久化实体的事务
9.    em.getTransaction().begin();
10.    
11.    // 使用相同的方式持久化实体
12.    em.persist(new Animal(1,"honey"));
13.    
14.    // 提交持久化实体的事务
15.    em.getTransaction().commit();
16.    
17.    // 关闭EntityManager
18.    em.close();

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

1 INSERT INTO Animal (id, name) VALUES (1, 'honey')

  [注] 如果您还不知道如何使用 OpenJPA 持久化对象,请阅读 本系列 前面的文章,了解 OpenJPA 开发的基本知识。

  持久化 Fish

  Fish 对象的持久化和 Animal 实体的持久化过程没有任何的不同,只不过 persist 方法的参数变成了 Fish 对象。我们可以使用下面的代码段来持久化一个新的 Fish 对象,请注意下面代码中加粗的部分。

1.    // 通过 Persistence 创建 EntityManagerFactory
2.    EntityManagerFactory factory = Persistence.createEntityManagerFactory(
3.            "jpa-unit", System.getProperties());
4.    
5.    // 从 EntityManagerFactory 中创建 EntityManager
6.    EntityManager em = factory.createEntityManager();
7.    
8.    // 开始持久化实体的事务
9.    em.getTransaction().begin();
10.    
11.    // 使用相同的方式持久化实体
12.    em.persist(new Fish(2,"mermaid","SEA"));
13.    
14.    // 提交持久化实体的事务
15.    em.getTransaction().commit();
16.    
17.    // 关闭EntityManager
18.    em.close();

  由于 Fish 对象的属性保存在两个表中,因此当我们执行这段代码时,OpenJPA 会将它转化为对应的两条 SQL 语句:

  INSERT INTO Animal (id, name) VALUES (2, 'mermaid')

  INSERT INTO Fish (id, territory) VALUES (2, 'SEA')

  持久化 Dog

  持久化 Dog 对象和持久化 Fish 对象的过程几乎一样,区别是 persist 方法的参数变成了 Dog 对象。

  em.persist(new Dog(3,"ba guai","MALE"));

  和持久化 Fish 对象时一样,Dog 对象的属性也保存在两个表中,因此当我们执行这段代码时,OpenJPA 会将它转化为对应的两条 SQL 语句:

  INSERT INTO Animal (id, name) VALUES (3, 'ba guai')

  INSERT INTO Dog (id, sex) VALUES (3, 'MALE')

  从数据库中查询实体对象

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

0
相关文章