- 浏览: 1532601 次
- 性别:
- 来自: 厦门
-
文章分类
- 全部博客 (516)
- Java (49)
- Java/Struts 2.0 (25)
- Java/Spring、Spring MVC (11)
- Java/Quartz (3)
- Java/Lucene (6)
- Java/Hibernate (19)
- Java/openJPA (7)
- Java/DWR (7)
- Java/Security、Spring Security/OAuth2 (6)
- Java/Threading (9)
- Java/XML (22)
- java/design pattern (4)
- Android (2)
- JavaScript (46)
- jquery (3)
- DB/MySQL (23)
- DB/Oracle (16)
- PHP (25)
- CSS (20)
- Linux (38)
- C/C++、DLL、Makefile、VC++ (31)
- 正则 (9)
- Eclipse (4)
- 安全、网络等概念 (25)
- 集群 (7)
- 网页 (5)
- 视频\音频 (1)
- HTML (6)
- 计算机数学/算法 (3)
- Virtualbox (1)
- LDAP (2)
- 数据挖掘 (6)
- 工具破解 (1)
- 其他 (13)
- Mail (1)
- 药材 (3)
- 游戏 (2)
- hadoop (13)
- 压力测试 (3)
- 设计模式 (3)
- java/Swing (2)
- 缓存/Memcache (0)
- 缓存/Redis (1)
- OSGI (2)
- OSGI/Gemini (0)
- 文档写作 (0)
- java/Servlet (3)
- MQ/RabbitMQ (2)
- MQ/RocketMQ (0)
- MQ/Kafka (1)
- maven (0)
- SYS/linux (1)
- cache/redis (1)
- DB/Mongodb (2)
- nginx (1)
- postman (1)
- 操作系统/ubuntu (1)
- golang (1)
- dubbo (1)
- 技术管理岗位 (0)
- mybatis-plus (0)
最新评论
-
pgx89112:
大神,请赐我一份这个示例的项目代码吧,万分感谢,1530259 ...
spring的rabbitmq配置 -
string2020:
不使用增强器 怎么弄?
OpenJPA的增强器 -
孟江波:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!4 ...
spring的rabbitmq配置 -
eachgray:
...
spring-data-redis配置事务 -
qljoeli:
学习了,楼主,能否提供一份源代码啊,学习一下,十分感谢!!!1 ...
spring的rabbitmq配置
首先是一些基础模型类的建立:
import java.io.Serializable; public abstract class BaseObject implements Serializable { /** */ private static final long serialVersionUID = -7443978018690354629L; @Override public abstract String toString(); @Override public abstract boolean equals(Object o); @Override public abstract int hashCode(); }
public abstract class DefaultIdGeneral extends BaseObject { /** */ private static final long serialVersionUID = -7483768110342207606L; // ID protected Long id; // 版本号,用于Hibernate乐观锁 protected Integer version; /** * * hibernate.id column="id" generator-class="native" * * @return Returns the id. */ public abstract Long getId(); /** * @param id * The id to set. */ public abstract void setId(Long id); /** * * @hibernate.version * * @return Returns the version. */ public Integer getVersion() { return version; } /** * @param version * The version to set. */ public void setVersion(Integer version) { this.version = version; } }
1、多对多关系映射(房间表与设备进行多对多关系映射),两者之间的关系映射时必需有一端的inverse=true,另一端为false,不能两端的inverse都为true。不然在保存或删除两者间的关系时不会对中间表进行操作。
1)房间表
import java.util.Set; import org.apache.commons.lang.builder.EqualsBuilder; import org.apache.commons.lang.builder.HashCodeBuilder; import org.apache.commons.lang.builder.ToStringBuilder; /** * title: 建筑中的房间 * * @author Administrator * @时间 2009-9-22:下午03:41:43 * @hibernate.class table="fc_roombasic" dynamic-update="true" * dynamic-insert="true" */ public class MapRoom extends DefaultIdGeneral { /** */ private static final long serialVersionUID = -3216302518592517083L; /** 房间名称 room_name */ private String name; /** 房间内设备 */ private Set<Equipment> equipments; /** * @hibernate.id column="room_id" generator-class="native" * */ @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } /** * @hibernate.property column="room_name" * */ public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @hibernate.set table="fc_room_equipment" lazy="true" cascade="all" * inverse="true" * @hibernate.collection-many-to-many column="equipment_id" * class="com.yinhoo.map.model.Equipment" * @hibernate.collection-key column="room_id" * @return */ public Set<Equipment> getEquipments() { return equipments; } public void setEquipments(Set<Equipment> equipments) { this.equipments = equipments; } @Override public boolean equals(final Object other) { ... } @Override public int hashCode() { .... } @Override public String toString() { ......... } }
2)设备
import java.util.Set; /** * title: 设备信息 * * @author Administrator * @时间 2009-9-22:下午09:49:32 * @hibernate.class table="fc_equip" dynamic-update="true" dynamic-insert="true" */ public class Equipment extends DefaultIdGeneral { /** 设备名称 */ private String name; /** 使用房间(对应roombasic表room_id) */ private Set<MapRoom> rooms; /** * @hibernate.id column="equip_id" generator-class="native" * */ @Override public Long getId() { return id; } @Override public void setId(Long id) { this.id = id; } /** * @hibernate.property column="equip_name" * */ public String getName() { return name; } public void setName(String name) { this.name = name; } /** * @hibernate.set table="fc_room_equipment" lazy="true" cascade="all" * inverse="false" * @hibernate.collection-many-to-many column="room_id" * class="com.yinhoo.map.model.MapRoom" * @hibernate.collection-key column="equipment_id" * @return */ public Set<MapRoom> getRooms() { return rooms; } public void setRooms(Set<MapRoom> rooms) { this.rooms = rooms; } }
2、多对多之间的查询。
public int getMapRoomTotalRecord(Equipment equipment) { String sql = "select count(room.id) from MapRoom as room where room.equipments.id=" + equipment.getId() + " "; // System.out.println(sql); return ((Long) getSession().createQuery(sql).uniqueResult()) .intValue(); }
String sql = "select count(room.id) from MapRoom as room join room.equipments as equip where equip.id=" + equipment.getId() + " ";
public int getMapRoomTotalRecord(Equipment equipment) { String sql = "select count(room.id) from MapRoom as room join room.equipments as equip where equip= :equipment"; // System.out.println(sql); return ((Long) getSession().createQuery(sql).setParameter("equipment", equipment).uniqueResult()).intValue(); }
查询结果集:
public List<MapRoom> getMapRooms(Equipment equipment, int first, int max) { String sql = "select room from MapRoom as room join room.equipments as equip where equip= :equipment "; return getSession().createQuery(sql).setParameter("equipment", equipment).setFirstResult(first).setMaxResults(max).list(); }
下面是参照http://www.blogjava.net/fuhoujun/archive/2009/01/06/232230.html 。
一个老师教许多学生,一个学生被许多老师教,一个学生有好多书,同一种书被许多同学拥有.
要查询教拥有书"a"的学生的老师!
Hql语句:
SELECT t FROM Teacher t join t.students s join s.books b where b.name = 'a'
解释:t.students s中s并不是集合的意思,而是t的students对象的表别名,join t.students s这个hql,hibernate会翻译成两个表的内连接关系
错误写法:
SELECT t FROM teacher t where t.students.books.name = 'a'
其实道理是很显然的,t.students是一个Set,那么这个Set怎么可能有books这样的属性呢?同理books.name也不对,所以 使用表间连接并给出别名t.students s,此时的对象s才有books属性,所以可以写s.books b,最后使用b.name限制查询b.name = 'a'.
另外一种写法:
SELECT t FROM Teacher t,Student s,Book b where s.id in elements(t.students) and b.id in elements(s.books)
这种方法没有出错!不过这种方式要用子查询!
发表评论
-
Hibernate延迟加载(转)
2014-05-04 15:54 769转自:http://cenjun615.blog.1 ... -
hibernate使用@subselect映射数据库视图
2013-12-21 21:15 3362文档引用:http://software-develope ... -
Hibernate annotation 自定义类型 userType
2013-04-01 17:26 1673第一步:添加自定义类: package com.a.en ... -
c3p0配置
2013-03-11 15:44 990<!--注册数据源 --> <bea ... -
hibernate之查询(设置查询提示) (转)
2012-02-03 15:36 1173转自:http://blog.csdn.net/f ... -
Hibernate的缓存策略(转)
2012-02-03 15:28 902Hibernate 的一级缓存 ... -
如何在spring配置多个Hibernate数据源链接(转)
2012-02-02 15:47 1204一、首先配置hibernate数据源: <?xm ... -
UserType 的 MapType,ListType
2011-12-07 14:42 1271import java.io.Serializable; i ... -
在Hibernate显式使用索引
2011-02-25 19:41 1348http://www.znetdevelopment.com/ ... -
Hibernate HQL 语法大全 查询技巧(2)
2009-09-25 19:10 180011.子查询 ... -
Hibernate HQL 语法大全 查询技巧(1)
2009-09-25 19:10 5000HQL: Hibernate查询语言 ... -
Join用法,HQL的方法,Hibernate中的fetch
2009-09-25 18:47 1785Join用法: 主要有Inner J ... -
xdoclet 2
2009-04-24 10:42 1485XDoclet 2 all XDoclet -&g ... -
hibernate 随机 查询
2009-04-03 21:36 2746/** * 随机取出N条记录 * * @p ... -
XDoclet - discriminator标签
2009-03-14 23:49 2398http://blog.csdn.net/chenjyuj/a ... -
Hibernate UserType 使用xdoclet映射数据库问题
2008-10-18 09:49 1150http://www.hibernate.org/282.ht ... -
Hibernate
2008-08-26 10:42 1145http://www.openfans.net/viewArt ... -
Hibernate 一对一
2008-08-26 10:14 1398//ClassA: import java.io.Seria ...
相关推荐
在Java的持久化框架Hibernate中,多对多(Many-to-Many)关系映射是一种常见的数据库交互模式,它用于表示两个实体之间复杂的关系。在这个场景中,一个实体可以与多个其他实体相关联,反之亦然。例如,在学生和课程...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作与业务逻辑层解耦,提高开发效率。本练习主要关注的是Hibernate中的单向多对多关联映射,这是一种常见的关系数据库设计...
在Java的持久化框架Hibernate中,多对多映射是一种常见的关系映射方式,用于处理两个实体类之间一对多或多对一的关系。在这个例子中,我们看到的是`Team`(团队)与`Member`(成员)之间的多对多关系,通过`Map`数据...
使用Hibernate进行一对多关联关系的映射,主要通过在XML映射文件中定义 `<many-to-one>` 和 `<set>` 标签来实现。 ##### 映射 `Order` 类 ```xml ``` 在上面的映射文件中: - `<many-to-one>` 元素...
在Java的持久化框架中,Hibernate是一个非常重要的工具,它为开发者提供了强大的对象关系映射(ORM)功能,使得在Java应用中操作数据库变得更加简单。本文将深入探讨Hibernate中的一对多和多对一映射关系,并通过一...
综上所述,Hibernate提供了丰富的关联关系映射机制,包括一对一、一对多和多对多关联,每种关联又可以细分为单向和双向,以及基于主键和基于外键的不同实现方式。正确理解和选择合适的关联关系对于构建高效、可维护...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而简化了数据访问层的编程。在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将...
对多关系在 Hibernate 中,多对多关系通常涉及到一个中间表来存储两个实体之间的关联。以下是如何配置 Hibernate 的多对多映射关系。 1. 数据库建表 假设我们有两张表,`users` 和 `roles`,它们通过 `user_roles` ...
【标题】"Hibernate教程20_关系映射案例三"主要涵盖了在Hibernate框架中如何进行对象关系映射(ORM)的实践,特别是针对复杂关系的处理。在这个教程中,我们可能会学习到以下关键知识点: 1. **关系映射**:...
在Java的持久化框架Hibernate中,单向多对多映射是一种常见的关系映射方式,尤其在处理数据库中两个实体间复杂关联时显得尤为重要。在注解版的Hibernate中,我们不再需要传统的XML配置文件,而是直接在实体类上使用...
总的来说,Hibernate的一对多和多对一映射是实现对象关系映射的重要手段,它们简化了数据库操作,提高了代码的可读性和可维护性。理解并熟练运用这些映射关系,对于开发高效、稳定的Java企业级应用至关重要。在实践...
在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射,特别是“一对一”双向外键关联。这种关联类型在数据库设计中很常见,尤其是在处理具有紧密耦合的实体时。Hibernate作为Java中广泛使用的对象关系...
"角色(使用hibernate映射多对多的关系).zip"这个压缩包文件提供了一个实例,展示了如何利用Hibernate来映射数据库中的多对多关联。在这个案例中,"角色"可能是一个典型的业务对象,它可能与多个其他实体有关系,...
在Java世界中,Hibernate是一个非常流行的ORM(对象关系映射)框架,它允许开发者将数据库操作转换为面向对象的方式,从而提高开发效率。本主题聚焦于“Hibernate双向一对一关联映射”的注解实现,这是一种高级的...
在IT行业中,数据库管理和对象关系映射(ORM)框架是至关重要的部分,特别是对于Java开发者而言,Hibernate是一个广泛使用的ORM工具。本主题将深入探讨Hibernate集合映射与关联关系,包括"student与Score的Map集合...
在Java的持久化框架Hibernate中,关联关系映射是实现对象关系映射(ORM)的重要概念,它允许我们在Java对象和数据库表之间建立链接。本文将深入探讨Hibernate中的一对多、多对一以及多对多映射。 1. 一对多与多对一...
在本教程中,我们将深入探讨Hibernate中的一个关键概念——关系映射中的组件映射。Hibernate作为Java领域中广泛使用的对象关系映射(ORM)框架,它允许开发人员以面向对象的方式处理数据库操作,极大地简化了数据层...
多对一关联映射的本质是将关联关系映射到数据库中,所谓的关联关系是对象模型在内存中的一个或多个引用。<many-to-one> 元素会在多的一端加入一个外键,指向一的一端,这个外键是由 `<many-to-one>` 中的 `column` ...
**二、Hibernate关系映射的类型** 1. **一对一(OneToOne)**: 表示一个实体对应另一个实体的唯一实例。这可以通过在两个类中都定义`@OneToOne`注解来实现,并通过`mappedBy`属性指定被引用的一方。 2. **一对多...