精通HIBERNATE---------读书笔记第十章 映射组成关系
来源:互联网 发布:淘宝贝南海幼儿园图片 编辑:程序博客网 时间:2024/05/29 18:32
晶粒度对象模型:把类中多个属性抽象出一个类,方便代码重用
public class Customer3 implements java.io.Serializable{private Long id;private String name;private Address homeAddress;private Address comAddress;
public class Address implements java.io.Serializable{private final String province;private final String city;private final String street;private final String zipcode;
把Address抽象出来了,注意Address没有主键!!
get,set方法省略,
对于表,应尽量减少外键,而不是可以定义2个表Customer和address
如下
create table CUSTOMERS (ID bigint not null, NAME varchar(15), HOME_PROVINCE varchar(255), HOME_CITY varchar(255), HOME_STREET varchar(255), HOME_ZIPCODE varchar(255), COM_PROVINCE varchar(255), COM_CITY varchar(255), COM_STREET varchar(255), COM_ZIPCODE varchar(255), primary key (ID));
然后用component组件定义映射关系
hibernate-mapping><class name="com.yuxuan.Customer3" table="CUSTOMERS3"><id name="id" type="long" column="ID"><generator class="increment"></generator></id>
<component name="homeAddress" class="com.yuxuan.Address"><parent name="customer3"></parent> <property name="province" type="string" column="HOME_PROVINCE"/> <property name="city" type="string" column="HOME_CITY"/> <property name="street" type="string" column="HOME_STREET"/> <property name="zipcode" type="string" column="HOME_ZIPCODE"/></component>
name是属性名,class是对应的类,parent是Address所属的整体类,即Customer,并且在Address类里要有setCustomer,getCustomer,这个要特别注意!!
区分一下Value类型和Entity类型
比如Address就是value类型,他没有自己的主键,不能单独持久化,session.save(address)是会报错的,而entity类型是有主键的,并且可以单独持久化。
删除customer时,所以value类型都会删除,而entity类型,要看cascade是否支持级联删除。
应用组成关系的持久化类:
public void saveCustomer(){ Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); Customer customer=new Customer(); Address homeAddress=new Address("province1","city1","street1","100001",customer); Address comAddress=new Address("province2","city2","street2","200002",customer); customer.setName("Tom"); customer.setHomeAddress(homeAddress); customer.setComAddress(comAddress); session.save(customer); tx.commit(); }catch (RuntimeException e) { if (tx != null) { tx.rollback(); } throw e; } finally { session.close(); } }
public void printCustomerAddress(Customer customer){ Address homeAddress=customer.getHomeAddress(); Address comAddress=customer.getComAddress(); if(homeAddress==null) System.out.println("Home Address of "+customer.getName()+" is null."); else System.out.println("Home Address of "+customer.getName()+" is: " +homeAddress.getProvince()+" " +homeAddress.getCity()+" " +homeAddress.getStreet()); if(comAddress==null) System.out.println("Company Address of "+customer.getName()+" is null."); else System.out.println("Company Address of "+customer.getName()+" is: " +comAddress.getProvince()+" " +comAddress.getCity()+" " +comAddress.getStreet()); }
public void deleteCustomer(Customer customer){ Session session = sessionFactory.openSession(); Transaction tx = null; try { tx = session.beginTransaction(); session.delete(customer); tx.commit(); }catch (RuntimeException e) { if (tx != null) { tx.rollback(); } throw e; } finally { session.close(); } }
映射符合组成关系,就是组件套组件,组件里面还有多对一,看代码吧
<hibernate-mapping > <class name="mypack.Computer" table="COMPUTERS" > <id name="id" type="long" column="ID"> <generator class="increment"/> </id> <property name="type" type="string" > <column name="COMPUTER_TYPE" length="15" /> </property> <component name="cpuBox" class="mypack.CpuBox"> <parent name="computer" /> <property name="type" type="string" > <column name="CPUBOX_TYPE" length="15" /> </property> <component name="graphicsCard" class="mypack.GraphicsCard"> <parent name="cpuBox" /> <property name="type" type="string" > <column name="GRAPHICSCARD_TYPE" length="15" /> </property> </component> <many-to-one name="vendor" column="CPUBOX_VENDOR_ID" class="mypack.Vendor" not-null="true" /> </component> </class> </hibernate-mapping>
还有一个主意的就是value类型是不能有映射文件的,比如这个例子中 graphicsCard和cpuBox都不能有hbm.xml而entity就要有了,如Vendor.hbm.xml
最后希望大家一同提高吧!
- 精通HIBERNATE---------读书笔记第十章 映射组成关系
- 精通Hibernate——映射组成关系
- 精通Hibernate---------读书笔记对象关系映射基础
- Hibernate映射组成关系
- Hibernate 映射组成关系
- Hibernate映射组成关系
- hibernate映射组成关系
- Hibernate -- 映射组成关系
- hibernate 映射组成关系
- Hibernate 映射组成关系
- Hibernate映射组成关系
- hibernate 映射组成关系(第六章)
- Hibernate之映射组成关系
- Hibernate映射组成关系简析
- 精通Hibernate之映射继承关系一
- 精通Hibernate之映射继承关系二
- 精通Hibernate之映射继承关系三
- 精通Hibernate之映射继承关系五
- get方法传参中文乱码解决方法
- OpenGL on Mac
- MINI2440开发板音频输入使用LINE输入
- linux常见命令
- ant之build.xml大全
- 精通HIBERNATE---------读书笔记第十章 映射组成关系
- vi基本操作命令
- Android下使用NDK 笔记
- socket的read和recv函数的区别
- SystemVerilog VMM Workshop Lab Guide(LG)学习笔记-Lab1 VMM Environment & Message Service
- 回到顶部
- uva_401_Palindromes
- 【DP】ants
- 我们的资源和优势是什么——苍蝇采蜜的原因