热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

hibernate双向多对一(一对多)及自身一对多关联

双向多对一(一对多)关联是最最常见的关联关系javabean如下:****双向的一对多(多对一)*少的一端,需要对多的一端进行集合的引用*publicclassAccount{

双向多对一(一对多)关联是最最常见的关联关系


javabean如下:

/**
*
* 双向的一对多(多对一)
* 少的一端,需要对多的一端进行集合的引用
*/
public class Account {

private int id;
private String accName;

//对多端对象集合的引用
private Set 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 getSetOrders() {
return setOrders;
}

/**
* @param setOrders the setOrders to set
*/
public void setSetOrders(Set 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;
}

}


映射文件:


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


















"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">















生成的数据库表:



@Test
public 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 setOrders=new HashSet();
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 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 getClist() {
return clist;
}

/**
* @param clist the clist to set
*/
public void setClist(Set clist) {
this.clist = clist;
}

}

映射文件


"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">


















数据库表:


测试代码:

@Test
public 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);
}
}


数据结构:















推荐阅读
  • 在使用SSH框架进行项目开发时,经常会遇到一些常见的问题。例如,在Spring配置文件中配置AOP事务声明后,进行单元测试时可能会出现“No Hibernate Session bound to thread”的错误。本文将详细探讨这一问题的原因,并提供有效的解决方案,帮助开发者顺利解决此类问题。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • 本文详细介绍了使用 Python 进行 MySQL 和 Redis 数据库操作的实战技巧。首先,针对 MySQL 数据库,通过 `pymysql` 模块展示了如何连接和操作数据库,包括建立连接、执行查询和更新等常见操作。接着,文章深入探讨了 Redis 的基本命令和高级功能,如键值存储、列表操作和事务处理。此外,还提供了多个实际案例,帮助读者更好地理解和应用这些技术。 ... [详细]
  • 一个建表一个执行crud操作建表代码importandroid.content.Context;importandroid.database.sqlite.SQLiteDat ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • 本文介绍了在 Java 编程中遇到的一个常见错误:对象无法转换为 long 类型,并提供了详细的解决方案。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 如何使用 `org.opencb.opencga.core.results.VariantQueryResult.getSource()` 方法及其代码示例详解 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文深入解析了JDK 8中HashMap的源代码,重点探讨了put方法的工作机制及其内部参数的设定原理。HashMap允许键和值为null,但键为null的情况只能出现一次,因为null键在内部通过索引0进行存储。文章详细分析了capacity(容量)、size(大小)、loadFactor(加载因子)以及红黑树转换阈值的设定原则,帮助读者更好地理解HashMap的高效实现和性能优化策略。 ... [详细]
  • 单链表的高效遍历及性能优化策略
    本文探讨了单链表的高效遍历方法及其性能优化策略。在单链表的数据结构中,插入操作的时间复杂度为O(n),而遍历操作的时间复杂度为O(n^2)。通过在 `LinkList.h` 和 `main.cpp` 文件中对单链表进行封装,我们实现了创建和销毁功能的优化,提高了单链表的使用效率。此外,文章还介绍了几种常见的优化技术,如缓存节点指针和批量处理,以进一步提升遍历性能。 ... [详细]
  • ButterKnife 是一款用于 Android 开发的注解库,主要用于简化视图和事件绑定。本文详细介绍了 ButterKnife 的基础用法,包括如何通过注解实现字段和方法的绑定,以及在实际项目中的应用示例。此外,文章还提到了截至 2016 年 4 月 29 日,ButterKnife 的最新版本为 8.0.1,为开发者提供了最新的功能和性能优化。 ... [详细]
  • 包含phppdoerrorcode的词条 ... [详细]
  • 在分析和解决 Keepalived VIP 漂移故障的过程中,我们发现主备节点配置如下:主节点 IP 为 172.16.30.31,备份节点 IP 为 172.16.30.32,虚拟 IP 为 172.16.30.10。故障表现为监控系统显示 Keepalived 主节点状态异常,导致 VIP 漂移到备份节点。通过详细检查配置文件和日志,我们发现主节点上的 Keepalived 进程未能正常运行,最终通过优化配置和重启服务解决了该问题。此外,我们还增加了健康检查机制,以提高系统的稳定性和可靠性。 ... [详细]
  • POJ 2482 星空中的星星:利用线段树与扫描线算法解决
    在《POJ 2482 星空中的星星》问题中,通过运用线段树和扫描线算法,可以高效地解决星星在窗口内的计数问题。该方法不仅能够快速处理大规模数据,还能确保时间复杂度的最优性,适用于各种复杂的星空模拟场景。 ... [详细]
author-avatar
_MIN_Y
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有