hibernate双向多对一(一对多)及自身一对多关联
来源:互联网 发布:js 发送get请求url 编辑:程序博客网 时间:2024/05/11 20:18
双向多对一(一对多)关联是最最常见的关联关系
javabean如下:
/** * * 双向的一对多(多对一) * 少的一端,需要对多的一端进行集合的引用 */public class Account {private int id;private String accName;//对多端对象集合的引用private Set<Orders> setOrders;public Account(){}/** * @return the id */public int getId() {return id;}/** * @param id the id to set */public void setId(int id) {this.id = id;}/** * @return the accName */public String getAccName() {return accName;}/** * @param accName the accName to set */public void setAccName(String accName) {this.accName = accName;}/** * @return the setOrders */public Set<Orders> getSetOrders() {return setOrders;}/** * @param setOrders the setOrders to set */public void setSetOrders(Set<Orders> setOrders) {this.setOrders = setOrders;}}
/** * * 双向的一对多(多对一) * 多的一端需要对少的一端进行对象的引用 */public class Orders {private int id;private String orderNum;private Date orderTime;private Account account;public Orders(){}/** * @return the id */public int getId() {return id;}/** * @param id the id to set */public void setId(int id) {this.id = id;}/** * @return the orderNum */public String getOrderNum() {return orderNum;}/** * @param orderNum the orderNum to set */public void setOrderNum(String orderNum) {this.orderNum = orderNum;}/** * @return the orderTime */public Date getOrderTime() {return orderTime;}/** * @param orderTime the orderTime to set */public void setOrderTime(Date orderTime) {this.orderTime = orderTime;}public Account getAccount() {return account;}public void setAccount(Account account) {this.account = account;}}
映射文件:
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><!-- name属性指定类名(全限定名) table指明表名,不指明table数据默认的表名和实体名一致 --> <class name="com.entity.Account" table="acc_tab"> <!-- type指明当前字段的类型 name对应实体中的属性名 --> <id type="integer" name="id"> <!-- 提供ID自增的策略 native会根据数据库自行判断 --> <generator class="native"/> </id> <property name="accName" type="string"></property> <set name="setOrders" cascade="all" inverse="true"> <key column="acc_id"></key> <one-to-many class="com.entity.Orders"/> </set> </class></hibernate-mapping>
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><!-- name属性指定类名(全限定名) table指明表名,不指明table数据默认的表名和实体名一致 --> <class name="com.entity.Orders" table="order_tab"> <!-- type指明当前字段的类型 name对应实体中的属性名 --> <id type="integer" name="id"> <!-- 提供ID自增的策略 native会根据数据库自行判断 --> <generator class="native"/> </id> <property name="orderNum" type="string"></property> <property name="orderTime" type="timestamp"></property> <many-to-one name="account" column="acc_id"></many-to-one> </class></hibernate-mapping>
生成的数据库表:
@Testpublic void add(){Transaction tx=null;Session session=null;try{session=HibernateUtils.getSession();tx=session.beginTransaction();Account account=new Account();account.setAccName("lm");Orders order1=new Orders();order1.setOrderNum("100");order1.setOrderTime(new Date());//session.save(order1);Orders order2=new Orders();order2.setOrderNum("10061");order2.setOrderTime(new Date());//session.save(order2);order1.setAccount(account);order2.setAccount(account);Set<Orders> setOrders=new HashSet<Orders>();setOrders.add(order1);setOrders.add(order2);account.setSetOrders(setOrders);session.save(account);tx.commit();}catch(HibernateException he){if(tx!=null){tx.rollback();}he.printStackTrace();}finally{HibernateUtils.closeSession(session);}}
自身关联:
javabean如下:
/** * * 双向一对多或多对一 自身关联 * */public class Category {private int id;private String name;//如果把Category看成是多的一端private Category parent;//如果把Category看成是少的一端,则需要对多的一端进行对象集合的引用private Set<Category> clist;public Category(){}/** * @return the id */public int getId() {return id;}/** * @param id the id to set */public void setId(int id) {this.id = id;}/** * @return the name */public String getName() {return name;}/** * @param name the name to set */public void setName(String name) {this.name = name;}/** * @return the parent */public Category getParent() {return parent;}/** * @param parent the parent to set */public void setParent(Category parent) {this.parent = parent;}/** * @return the clist */public Set<Category> getClist() {return clist;}/** * @param clist the clist to set */public void setClist(Set<Category> clist) {this.clist = clist;}}
映射文件
<?xml version="1.0"?><!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN""http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"><hibernate-mapping><!-- name属性指定类名(全限定名) table指明表名,不指明table数据默认的表名和实体名一致 --> <class name="com.entity.Category" table="cate_tab"> <!-- type指明当前字段的类型 name对应实体中的属性名 --> <id type="integer" name="id"> <!-- 提供ID自增的策略 native会根据数据库自行判断 --> <generator class="native"/> </id> <property name="name" type="string"></property> <set name="clist" inverse="true"> <key column="parent_id"></key> <!-- 配置一对多的关联映射 --> <one-to-many class="com.entity.Category"/> </set> <many-to-one name="parent" column="parent_id"></many-to-one> </class></hibernate-mapping>
数据库表:
测试代码:
@Testpublic void add(){Transaction tx=null;Session session=null;try{session=HibernateUtils.getSession();tx=session.beginTransaction();//添加一级分类Category c1=new Category();c1.setName("computer");session.save(c1);//添加二级分类Category c2=new Category();c2.setName("java");c2.setParent(c1);session.save(c2);//添加二级分类Category c3=new Category();c3.setName(".net");c3.setParent(c1);session.save(c3);tx.commit();}catch(HibernateException he){if(tx!=null){tx.rollback();}he.printStackTrace();}finally{HibernateUtils.closeSession(session);}}
数据结构:
0 0
- hibernate双向多对一(一对多)及自身一对多关联
- hibernate 一对多双向自身关联
- Hibernate自身双向一对多关联
- Hibernate自身双向一对多关联
- hibernate中一对多(多对一)双向关联
- hibernate一对多 多对一 的 双向关联
- hibernate双向一对多/多对一关联
- hibernate多对一和一对多双向关联
- hibernate 关联映射 双向多对一(一对多)
- hibernate双向关联(一对多,多对一)
- Hibernate初学者---多对一/一对多 双向关联
- hibernate映射关系 一对多、多对一单向关联 一对多双向关联
- 双向关联:一对多/多对一
- 一对多双向关联 、 多对一
- 一对多自身关联双向映射
- 8、自身双向一对多关联关系
- Hibernate一对多双向关联
- Hibernate一对多双向关联
- Android Context的一些总结
- 关于游戏开发那些事(吐槽向)
- linux中的热插拔和mdev机制
- 【笔试/面试】数组及其内存结构
- Android 消息循环机制源码分析
- hibernate双向多对一(一对多)及自身一对多关联
- leetcode 283. Move Zeroes
- Html5 手机wap开发、微信开发、APP开发的优缺点-创业者必知
- Nagle算法
- Android-Fragment和Activity的传值通信
- 自定义实现mapreduce计算的value类型
- C语言18个经典问题答录
- 直方图均衡化
- fragment的使用