《Hibernate学习笔记八》:组件映射

来源:互联网 发布:gis软件开发 编辑:程序博客网 时间:2024/06/05 00:59

《Hibernate学习笔记八》:组件映射

前面介绍了一对一的单向、双向外键关联,例如,学生证和学生是一个一对一的关系。这篇博文主要是介绍下组件映射,即一个是另一个的一部分,例如,学生证的信息也可以作为学生信息的一部分,即在数据库中只存在学生一个表,而不是有学生和学生证两个表,并且这两个表中有一个一对一的关联关系。

如下:

有人或许会说,那我们就将学生和学生证的信息写在一个类中,则就不需要组件映射了,确实可以这样,但是,根据类的设计原则,我们一般都会将其设计为两个类,然后将学生证的信息作为一个组件映射为学生信息的一部分。那么该如何来实现了,下面将进行介绍。

组件映射的Annotation实现:借助于@embedded

IdCard类

IdCard类由于是学生信息的一部分,因此此类不是一个实体类,即没有用@Entity注解标识。

public class IdCard {    private String idCardNum;    private Date idCardDate;    //..几个属性的get、set方法    }
  • 1
  • 2
  • 3
  • 4
  • 5

Student类

里面用@Embedded来对IdCard这个类进行注解即可实现组件映射。

@Entity    public class Student {    private int id;    private String name;    private IdCard idCard;    @Id    @GeneratedValue    public int getId() {        return id;    }    public void setId(int id) {        this.id = id;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    @Embedded  //这样就是将IdCard作为一个组件内嵌进来了。    public IdCard getIdCard() {        return idCard;    }    public void setIdCard(IdCard idCard) {        this.idCard = idCard;    }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28

hibernate.cfg.xml文件

在此文件中,只需要指定一个映射实体类Student即可。如下:

<mapping  class="com.hibernate.model.Student"/>
  • 1

测试类

public class StudentTest {    @Test    public void testSchema(){        ServiceRegistry serviceRegistry = new StandardServiceRegistryBuilder().configure().build();        Metadata metadata = new MetadataSources(serviceRegistry).buildMetadata();        SchemaExport schemaExport = new SchemaExport();        schemaExport.create(EnumSet.of(TargetType.DATABASE), metadata);    }    }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

此测试类就是简单的将SQL语句写入数据库中。

当运行该测试类,在控制台中我们可以看到如下的输出信息,从输出信息中我们可以看到:创建了一个学生表,且学生证的信息时学生表的一部分。

由于使用Annotation来实现组件映射相当简单,这里就不再介绍关于使用XXX.hbm.xml文件的实现了。


from: http://blog.csdn.net/u010412719/article/details/51334111

原创粉丝点击