`
anxin587
  • 浏览: 24083 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

hibernate初级 对象-映射组成关系

阅读更多

域对象中,类之间存在四种关系,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初级学习

    ### Hibernate初级学习知识点详解 #### 一、Hibernate简介与ORM概念 - **ORM技术定义**:对象关系映射(Object/Relational Mapping, ORM)是一种编程技术,用于将对象模型与关系型数据库模型进行桥接。它使得开发...

    ssh学习初级资料

    Hibernate通过ORM(对象关系映射)技术将Java对象与数据库表对应起来,开发者可以通过操作对象就能完成对数据库的操作,无需编写繁琐的SQL语句。它还提供了缓存机制,提高了数据访问的效率。 学习SSH框架,你需要...

    s2sh基础框架

    Hibernate是一个对象关系映射(ORM)工具,用于简化Java应用与数据库之间的交互。它通过映射Java类到数据库表,使得开发者可以使用面向对象的方式来操作数据库,避免了繁琐的SQL语句编写。Hibernate支持自动持久化...

    JE22教程PDF格式,使用初级学者

    在J2EE中,特别是与持久化相关的部分,如JPA(Java Persistence API)和Hibernate,映射关系指的是对象与数据库表之间的对应。ORM(Object-Relational Mapping)技术使得Java对象可以直接操作数据库记录,简化了数据...

    spring源码

    Hibernate是一个强大的ORM(对象关系映射)工具,它将数据库操作转化为对Java对象的操作,降低了数据访问的复杂性。Spring通过HibernateTemplate或SessionFactoryBean简化了Hibernate的配置和使用,使得事务管理更加...

    计算机-后端-基于SSH架构的社区卫生管理信息系统的研究与实现.pdf

    Hibernate作为一款强大的对象关系映射(Object-Relational Mapping,ORM)框架,简化了数据库操作,使得开发人员能用Java对象来操作数据库,无需关心底层SQL语句。在社区卫生管理系统中,Hibernate可以实现居民健康...

    简单的电子购物系统,实现了最基本的功能

    2. **Hibernate**:Hibernate是一个开源的对象关系映射(ORM)框架,用于Java应用程序。在电子购物系统中,Hibernate简化了数据库操作,允许开发人员用面向对象的方式处理数据库事务,例如添加、更新和删除商品信息...

    跟我StepByStep学FLEX教程-王一松.pdf

    17. Flex与Hibernate整合:Hibernate是一个对象关系映射(ORM)工具,用于Java环境。Flex与Hibernate整合可以使得Flex应用程序能够与数据库进行交互,实现数据的持久化。 18. 版权声明:通常在教程或书籍中,作者会...

    基于MVC设计模式的JSP团购网站

    Hibernate通过XML配置文件或注解定义对象与数据库表之间的映射,提供了一套API来进行增删改查操作。例如,`Product`类可以通过Hibernate自动映射到`products`表,开发者只需调用`session.save(product)`即可完成商品...

    物业管理系统的设计答辩PPT学习教案.pptx

    Struts框架负责控制流程,提供MVC(模型-视图-控制器)架构,而Hibernate作为ORM(对象关系映射)工具,简化了数据库操作,实现了数据层和业务层的解耦。\n\n4. **物业管理行业现状**:物业管理在中国虽然只有约20年...

    javaweb后台删除,验证

    这可以通过角色-权限映射实现,例如在数据库中存储角色和权限关系,然后在后台检查用户角色对应的权限。 2. **删除操作**: - **数据库操作**:在JavaWeb中,我们通常使用JDBC(Java Database Connectivity)来...

    myblog我的博客源码

    在Java中,可能会用到如Hibernate或MyBatis这样的ORM(对象关系映射)框架,以便与数据库进行交互,如MySQL或PostgreSQL。 - **视图(View)**:JSP文件构成视图部分,负责呈现数据。开发者会在JSP页面中插入EL...

    addressbook

    在实际开发中,开发者可能会使用Hibernate或MyBatis这样的ORM(对象关系映射)工具来简化与数据库的交互。 在【压缩包子文件的文件名称列表】中,我们只有一个文件名"addressbook",这可能是整个项目的主入口点,...

    三层架构2的学习

    这层通常包含数据访问对象(DAO)和实体类,通过ORM(对象关系映射)框架,如Hibernate或Entity Framework,将数据模型与数据库表映射起来。 三层架构的优势在于其模块化和解耦特性,允许开发团队在不同层上独立...

    myeclipse 网上购物系统

    同时,Hibernate作为持久层框架,可以方便地处理数据库操作,实现对象关系映射,降低数据库操作的复杂性。 在用户管理方面,系统通常会包含注册、登录、密码找回等功能。这部分需要设计合理的用户验证机制,确保...

    图书馆管理系统

    同时,为了处理用户请求,系统可能采用ORM(对象关系映射)技术,如Hibernate,将数据库操作转化为面向对象的方式,简化编程。 六、错误处理与日志记录 为了确保系统的稳定运行,错误处理和日志记录是必不可少的。...

    底层JAVA框架,只有后台,其它没有。

    此外,也可能使用ORM(对象关系映射)框架如Hibernate或MyBatis,它们简化了数据库操作,使代码更易维护。 6. **HTTP请求处理**:Controller层通常负责接收和响应HTTP请求,学习如何使用Spring的@RequestMapping...

Global site tag (gtag.js) - Google Analytics