域对象中,类之间存在四种关系,1关联,也就是类之间的引用关系,一对一,一对多,多对多,单向,双向。2 依赖,指的是类之间的访问关系,3 聚集,整体与部分的关系,部分类对象不能独立存在,4一般化,也就是继承关系
create table customer(id int auto_increment primary key,name varchar(20),homeprovince varchar(20),homeadrcity varchar(20), comprovince varchar(20),comadrcity varchar(20));建立关系数据模型的一个重要原则就是在不导致数据冗余的前提下,尽可能减少数据库表的数目以及他们之间的外键关联, 所以上面的sql语句并没有分成两张表来写,而是仅仅用了一张表。这样就避免了另外一张address表,并且查询的时候也不用外键关联了,但是如果还有一个employee也有address这样的情况下就需要去考虑把address给独立出来,要不就造成很大的数据冗余。但是域模型和数据模型是不通的出发点,域模型是有程序代码来组成,所以细化持久化类的粒度可以提高代码的可重用性,
所以在我们的域模型中,新建立了一个类address类,如下
package entity;
public class Address
{
private String province;
private String adrcity;
private Customer customer;
public void setProvince(String province)
{
this.province=province;
}
public String getProvince()
{
return this.province;
}
public void setAdrcity(String adrcity)
{
this.adrcity=adrcity;
}
public String getAdrcity()
{
return this.adrcity;
}
public void setCustomer(Customer customer)
{
this.customer=customer;
}
public Customer getCustomer()
{
return this.customer;
}
}其中address里面包括属性customer,customer里面增加两个属性分别为homeaddress和comaddress,这两个属性多时address类型,这样就相当于给customer类加了两个属性,而这两个属性分别代表两个组件,hibernate hbmxml里面配置如下
<component name="homeaddress" class="Address">
<parent name="customer"/>
<property name="province" column="HOMEPROVINCE"/>
<property name="adrcity" column="HOMEADRCITY" />
</component>
<component name="comaddress" class="Address">
<parent name="customer"/>
<property name="province" column="COMPROVINCE"/>
<property name="adrcity" column="COMADRCITY" />
</component>
component name为映射持久化类的属性名,class是指定homeaddress的类型, component还包括一个parent和一组property,其中parent是指出address所属的整体类,property则是具体的属性,通过上面的配置就可以对customer进行相应的数据库操作
public static void saveCustomerWithAdr()
{
Session session=HibernateUtil.getSessionFactory().openSession();
session.beginTransaction();
Customer c=new Customer();
c.setName("andy.cao");
Address homeaddress=new Address();
homeaddress.setProvince("jiangsu");
homeaddress.setAdrcity("suzhou");
Address comaddress=new Address();
comaddress.setProvince("jiangsu");
comaddress.setAdrcity("suzhou");
c.setHomeaddress(homeaddress);
c.setComaddress(comaddress);
session.save(c);
session.getTransaction().commit();
}
上面这段就是业务逻辑,通过定义customer对象,给customer属性赋上相应的值,并对他保存,有上面可以看出address不具有oid,这是hibernate组件的一个重要特性,因为address没有oid,所以session不能单独保存更新删除,值类型,和实体类型最大的区别是前者不具有oid,不能单独持久化,虽然entity包里面多了address类,但是这个类可以说是customer类的辅助类,所以无需进行配置,如果配置了会给出异常
分享到:
相关推荐
hibernate-commons-annotations-4.0.1.Final.jar hibernate-core-4.1.12.Final.jar hibernate-ehcache-4.1.12.Final.jar hibernate-entitymanager-4.1.12.Final.jar hibernate-jpa-2.0-api-1.0.1.Final.jar ...
赠送jar包:hibernate-jpa-2.1-api-1.0.2.Final.jar; 赠送原API文档:hibernate-jpa-2.1-api-1.0.2.Final-javadoc.jar; 赠送源代码:hibernate-jpa-2.1-api-1.0.2.Final-sources.jar; 赠送Maven依赖信息文件:...
hibernate 对象关系映射总结hibernate 对象关系映射总结hibernate 对象关系映射总结
Hibernate对象关系映射一对多 很基础等文档
hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码 hibernate-jpa-2.1-api-1.0.0.final-sources.jar 源码
hibernate5--3.映射关系
很多人为了配置jpa找这个动态产生字节码的jar文件,hibernate-distribution-3.3.1.GA包太大,而hibernate-distribution-3.3.2.GA的jar没有这个jar文件,希望对大家有用
hibernate-annotations-3.4.0.GA hibernate-annotations-3.4.0.GA hibernate-annotations-3.4.0.GA
hibernate-jpa-2.0-api-1.0.1.Final.jar
hibernate-jpa-2.1-api-1.0.0.final.jar.zip,内含hibernate-jpa-2.1-api-1.0.0.final.jar
Hibernate稳定版(hibernate-release-5.3.23.Final.zip),Hibernate ORM 是一个为应用程序、库和框架提供对象/关系映射 (ORM) 支持的库。它还提供了 JPA 规范的实现,这是 ORM 的标准 Java 规范。
hibernate-commons-annotations-5.0.1.Final.jar的源码
hibernate-release-4.0.0.Final.zip
hibernate-release-4.3.10.Final.zip 官方原版,因上传文件大小限制,去掉里面的project
使用hibernate-validator 进行校验的jar包,里面包括了基础hibernate-validator-5.0.0.CR2.jar hibernate-validator-annotation-processor-5.0.0.CR2.jar 之外,还包括了el-api-2.2.jar javax.el-2.2.4等项目必不可...
hibernate-release-5.3.7.Final
hibernate-release-5.1.0.Final
hibernate-commons-annotations-4.0.1.Final.jar
《精通Hibernate》学习-对象关系映射基础.zip
hibernate-release-5.0.7.Final压缩包 -document -lib -project 内部Hibernate依赖库: antlr-2.7.7.jar dom4j-1.6.1.jar geronimo-jta_1.1_spec-1.1.1.jar hibernate-commons-annotations-5.0.1.Final.jar ...