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

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

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

如下:

《Hibernate学习笔记八》:组件映射_第1张图片

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

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

IdCard类

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

public class IdCard {
    private String idCardNum;
    private Date idCardDate;
    //..几个属性的get、set方法
    }

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;
    }

    }

hibernate.cfg.xml文件

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

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

测试类

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);
    }

    }

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

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

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

你可能感兴趣的:(Hibernate,数据库,组件映射)