标签:
前面介绍了一对一的单向、双向外键关联,例如,学生证和学生是一个一对一的关系。这篇博文主要是介绍下组件映射,即一个是另一个的一部分,例如,学生证的信息也可以作为学生信息的一部分,即在数据库中只存在学生一个表,而不是有学生和学生证两个表,并且这两个表中有一个一对一的关联关系。
如下:
有人或许会说,那我们就将学生和学生证的信息写在一个类中,则就不需要组件映射了,确实可以这样,但是,根据类的设计原则,我们一般都会将其设计为两个类,然后将学生证的信息作为一个组件映射为学生信息的一部分。那么该如何来实现了,下面将进行介绍。
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文件的实现了。
标签:
原文地址:http://blog.csdn.net/u010412719/article/details/51334111