- 浏览: 378193 次
- 来自: 北京
文章分类
- 全部博客 (237)
- XML (6)
- JavaSE (39)
- Junit (1)
- Maven (10)
- JavaScript (12)
- JavaEE (16)
- HTML5 (10)
- java多线程 (8)
- Hibernate (30)
- Java反射 (3)
- Spring (11)
- Struts (1)
- svn (2)
- linux (12)
- 代码实例 (1)
- 设计模式 (1)
- UML (1)
- javassist (1)
- Oracle (3)
- Hibernate异常 (9)
- DWR (6)
- Java泛型 (2)
- SpringMVC (11)
- Dbunit (3)
- github (2)
- Algorithm (1)
- zTree (1)
- jquery (7)
- freemarker (4)
- mysql (5)
- ffmpeg (1)
- 编码 (1)
- lucene (15)
- hadoop (1)
- JVM (1)
- Regular Expressions (5)
- myeclipse (1)
- 爬虫 (7)
- 加密 (3)
- WebService (2)
- Socket (2)
- Windows (1)
最新评论
-
wxpsjm:
好直接
HV000030: No validator could be found for type: java.lang.Integer. -
wxhhbdx:
学习了,对新手来说很不错的教程。
SpringMVC入门 (二) 数值传递 -
xgcai:
正好在学dwr
DWR入门 (二)用户实例
摘自 [圣思园hibernate 017. 自身双向一对多关联关系深入解析]
数据库Schema: (Oracle)
create table test_categories(
ID number(15) not null,
name varchar2(15),
category_id number(15),
primary key (id)
);
alter table categories add index idx_category_id
(category_id), add constraint
fk_category_id foreign key (category_id) references
categories(id);
这里Category类实现了自身的一对多, 每一个Category有一个父表和若干的字表。
父表是它上一层的类, 比如CPU的父类表是电脑硬件,
而CPU的子类表可以是intel cpu和 amd cpu. (双向就是指向父类和向子类)
表的结构关联如下:
=========================具体实例====================
这里我们用一个计算机硬件的分类来演示这个自身双向一对多。
结构图:
Category.hbm.xml代码:
hibernate代码:
注意这里是通过oracle的sequence来给id赋值:
通过该程序可以看到, 只要把这些类的实例通过java的方式赋值,最后save它们的最高级的父类对象, 所有的对象都会被存储到数据库中, 并建立对应关系。
个人感觉Hibernate对于Java程序员的便利性在这个例子中得到充分体现。
------------------------------
数据库里显示最高级父类的cate id是没有任何数值的, 我们可以设置oracle给这种情况一个-1.
不过这里再次执行发现还是什么都没有。因为要在hibernate那里设置一下。
找到category.hbm.xml
数据库Schema: (Oracle)
create table test_categories(
ID number(15) not null,
name varchar2(15),
category_id number(15),
primary key (id)
);
alter table categories add index idx_category_id
(category_id), add constraint
fk_category_id foreign key (category_id) references
categories(id);
public class Category { private Long id; private String name; private Category parentCategory; private Set<Category> childCategories; public Category() { // TODO Auto-generated constructor stub } public Category(String name, Category parentCategory, Set<Category> childCategories) { this.name = name; this.parentCategory = parentCategory; this.childCategories = childCategories; } }
这里Category类实现了自身的一对多, 每一个Category有一个父表和若干的字表。
父表是它上一层的类, 比如CPU的父类表是电脑硬件,
而CPU的子类表可以是intel cpu和 amd cpu. (双向就是指向父类和向子类)
表的结构关联如下:
=========================具体实例====================
这里我们用一个计算机硬件的分类来演示这个自身双向一对多。
结构图:
Category.hbm.xml代码:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping package="com.lj.zhang.category"> <class name="Category" table="test_category" lazy="false"> <id name="id" column="id" type="long"> <generator class="sequence"> <param name="sequence">cate_seq</param> </generator> </id> <property name="name" column="name" type="string"/> <set name="childCategories" cascade="all" inverse="true"> <key column="category_id"></key> <one-to-many class="com.lj.zhang.category.Category"/> </set> <many-to-one name="parentCategory" class="com.lj.zhang.category.Category" column="category_id"></many-to-one> </class> </hibernate-mapping>
hibernate代码:
Session session = HibernateUtil.openSession(); Transaction tx = null; tx = session.beginTransaction(); Category c=new Category("computer",null,new HashSet<Category>()); //这里没有通过cpu.setParent来指定父类, 而是直接在构造函数里将父类实例传递进去,下面都是这样。 //setParent也可以实现同样效果。 Category cpu=new Category("cpu",c,new HashSet<Category>()); Category motherboard=new Category("motherboard",c,new HashSet<Category>()); c.setChildCategories(ArraysHelper.asSet(cpu,motherboard)); Category intel_cpu=new Category("intel_cpu",cpu,new HashSet<Category>()); Category amd_cpu=new Category("amd_cpu",cpu,new HashSet<Category>()); cpu.setChildCategories(ArraysHelper.asSet(intel_cpu,amd_cpu)); Category asus=new Category("asus",motherboard,new HashSet<Category>()); Category giga=new Category("giga",motherboard,new HashSet<Category>()); motherboard.setChildCategories(ArraysHelper.asSet(asus,giga)); session.save(c); tx.commit(); session.close();
注意这里是通过oracle的sequence来给id赋值:
<id name="id" column="id" type="long"> <generator class="sequence"> <param name="sequence">cate_seq</param> </generator> </id>
通过该程序可以看到, 只要把这些类的实例通过java的方式赋值,最后save它们的最高级的父类对象, 所有的对象都会被存储到数据库中, 并建立对应关系。
个人感觉Hibernate对于Java程序员的便利性在这个例子中得到充分体现。
------------------------------
数据库里显示最高级父类的cate id是没有任何数值的, 我们可以设置oracle给这种情况一个-1.
不过这里再次执行发现还是什么都没有。因为要在hibernate那里设置一下。
找到category.hbm.xml
发表评论
-
Connection is read-only. Queries leading to data modification are not allowed。
2014-04-06 21:52 3742<tx:advice id="txAdvic ... -
org.hibernate.HibernateException: No Session found for current thread
2014-04-06 12:37 0今天在maven中整合spring和hibernate,并使用 ... -
select new Topic from ' Mysql 生成SQL语句错误
2014-03-30 22:51 1664Caused by: com.mysql.jdbc.exce ... -
Unable to locate appropriate constructor on class
2014-02-20 00:11 1471org.hibernate.hql.internal.ast. ... -
Hibernate的load和get实际应用区分简单实例
2013-12-18 11:58 878今天在看孔浩的CMS视频时候看到的。 在57 -文章管理06 ... -
自定义OpenSessionInViewer过滤器
2013-12-11 12:12 1061摘自孔浩视频 spring部分-17_spring_SSH整合 ... -
数据库事务 (三)虚读(Phantom Read)
2013-12-01 13:21 0关于各种读 虚读 phantom read: 转自维基 ... -
Hibernate悲观锁
2013-11-30 17:30 0为了防止两个线程同时修改一个数据,造成更新数据丢失,我们可以使 ... -
Hibernate查询HQL实例
2013-11-29 15:56 1299三个实体类对象: public class Team { ... -
QBC与HQL检索
2013-11-28 17:39 0QBC(Query By Criteria) API提供了检索 ... -
Hibernate继承映射
2013-11-28 12:36 656继承映射分为三种情况 1.每个子类一张表 比如说有一个Pers ... -
Hibernate通过Composite-element配置外联表实例 (码)
2013-11-28 11:07 1024摘自圣思园Hibenrate 26. 组件映射深度解析 -37 ... -
Hibernate配置复合主键 composite primary key (二)
2013-11-27 16:41 1454摘自圣思园Hibernate 26.组件映射深度解析 上一篇 ... -
Hibernate配置复合主键 composite primary key (一)
2013-11-27 14:15 2460这篇是关于如何配置Hibernate实现复合主键的映射功能。 ... -
Hibernate通过Comparator接口自定义排序规则
2013-11-25 20:42 2532摘自圣思园 Hibernate25.自定义内存排序器详解及符合 ... -
Hibernate配置Set和List
2013-11-25 10:44 1887========================Set==== ... -
Hibernate的Map配置
2013-11-23 16:21 1303摘自圣思园022.Hibernate映 ... -
Hibernate多对多配置
2013-11-21 22:39 888场景: Student和Course,每一个Student有多 ... -
Hibernate延迟加载案例 (多: 一: 一,附代码)
2013-11-21 17:41 598摘自圣思园Hibernate20.一 ... -
Hibernate一对一配置
2013-11-20 21:49 1055摘自圣思园 19.Hibernate的对象检索策略深度解析.a ...
相关推荐
### 映射一对多双向关联关系时设置SET元素 - 应在`set`元素中设置`cascade`属性,用于级联保存、更新和删除操作。 - 可以使用`inverse`属性指定一方负责维护关系。 ### List的主要实现类及其特点 - **LinkedList*...
8. **一对多双向关联的SET元素配置**: - cascade属性定义级联操作,如`cascade="save-update,delete"`。 - key column定义外键列名。 - one-to-many表示关联方向,inverse定义关联维护方。 9. **List的实现类**...
8. **一对多双向关联的级联操作**: - 在set元素中设置`cascade`属性,如`cascade="save-update,delete"`,可避免重复SQL语句,实现级联保存、更新和删除。 9. **集合实现类**: - LinkedList:链表结构,插入和...
- 在双向一对多关联的 SET 元素中,设置 `cascade` 属性进行级联保存、更新和删除,避免冗余 SQL。 9. **集合实现类**: - **LinkedList**:基于链表的数据结构,适合于插入和删除操作。 - **ArrayList**:基于...
5. 将集合类中的对象与数据库关联,例如,实体类的属性可以是Set或List类型,映射到数据库的多对一或一对多关系。 在"Collection_Set"文件中,你可以找到如何使用Java集合配合Hibernate操作数据库的具体实例,通过...
8. **一对多双向关联的级联操作**: - 在`set`元素中设置`cascade`属性,如`cascade="save-update,delete"`,以避免重复SQL语句。 9. **List的实现类**: - **LinkedList**:链表结构,适合于频繁插入和删除操作...
LinkedList基于双向链表,插入和删除速度快,但随机访问效率低,因为需要遍历链表。 5.String与StringBuffer的区别:String是不可变对象,每次修改都会创建新对象,而StringBuffer是线程安全的可变对象,适合在多...
映射一对多双向关联关系** - 在`<set>`元素中设置`cascade`属性,用于级联操作(如保存、更新或删除)。 - 使用`inverse`属性指定哪一方负责维护关联关系。 - 设置`key`元素来指定外键字段。 - 通过`class`属性...
- 可能涉及双向链表或循环链表等复杂结构。 **Singleton模式与Factory模式:** - **Singleton模式**: - 确保一个类只有一个实例,并提供一个全局访问点。 - 实现方式包括懒汉式、饿汉式等。 - 考虑线程安全性...
主要实现有`ArrayList`(基于数组)、`LinkedList`(基于双向链表)。 - **Set**:不允许重复元素的集合。主要实现有`HashSet`(基于哈希表)、`TreeSet`(基于红黑树)。 - **接口与实现**: - `List`接口的主要...
在大数据面试中,Java技术是不可或缺的一部分,它涉及到虚拟机、面向对象、多线程、集合框架、反射、内存管理等多个方面。以下是一些相关知识点的详细解释: 1. **HashMap底层原理**:HashMap是基于哈希表实现的,...
这份名为《整理的Java-EE面试总结.pdf》的文档是一份关于Java基础面试知识点的总结,内容涉及了多个在面试中常见的问题和概念,以及它们的区别和使用场景。根据提供的文件信息,下面将详细解读其中的关键知识点。 ...
- **目的**:定义对象间的一种一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。 #### 六、Spring框架 1. **IoC** - **概念**:Inversion of Control,反转控制,通过...
- Hibernate负责对象关系映射,实现对数据库的操作。 - 两者通过Spring管理事务、配置环境等方式进行整合。 #### Spring框架 1. **Spring中FactoryBean与BeanFactory的区别:** - `BeanFactory`是Spring的核心...
- **O/R Mapping**:对象关系映射是将对象模型与关系型数据库模型相互转换的技术,如Hibernate实现了这一过程,提高了开发效率。 - **左外连接与右外连接**:SQL中的左外连接保留左表所有记录,即使右表没有匹配;右...
- 允许一个null键和多个null值。 - 在多线程环境中使用时需要额外同步处理。 #### 4. String、StringBuffer、StringBuilder的区别 - **String**: - 不可变字符串类。 - 字符串一旦创建后不能改变。 - 所有...
LinkedList基于双向链表,适合频繁插入和删除。 3. Error是严重问题,如系统级错误,无法恢复,而Exception是程序运行时的异常,可以通过try-catch捕获处理。 4. Abstract class可以有方法实现,可以被继承;...
以上只是部分题目涉及的知识点,面试中还会涉及到Volatile的作用、Synchronized的不同用法、面向对象特性、线程池原理、数据库设计、ACID原则、Hibernate优缺点、Java虚拟机内存结构、垃圾收集器、TCP/IP协议栈、...
- **LinkedList**使用双向链表结构,插入和删除操作更快,但按索引访问较慢。 5. **Enterprise JavaBeans (EJB)**: - EJB是Java企业级应用开发的重要组成部分,基于Java EE(Java Platform, Enterprise Edition...
9. **ORM框架**:对象关系映射(ORM)框架如Hibernate和MyBatis简化了Java与数据库之间的交互,将数据操作转化为对象操作。 10. **数据序列化与反序列化**:Java的`java.io.Serializable`接口使得对象可以被序列化,...