`
RyanPoy
  • 浏览: 50439 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

hibernate入门使用系列 3-- xml关系映射篇(中)

阅读更多

接上篇 hibernate入门使用系列 2-- xml关系映射篇(上)

上篇讲了1:1,那么这次继续讲1:n和n:1。

这次用到的例子是Father和child之间的关系。一个father可以有n个child,但是1个child只有一个father。这里只说生父。至于其他的继父、养父、干爹等等,不再范围之内。

好吧。还是同前面的一样。现建立实体模型如下:

 

 

根据模型创建数据库。sql脚本如下:

use HibernateQuickUse;
drop table if exists Child;
drop table if exists Father;

create table Father (
	id varchar(32) primary key,
	name varchar(32) not null
);

create table Child (
	id varchar(32) primary key,
	name varchar(128) not null,
	father_id varchar(32) not null,
	foreign key(father_id) references Father(id)
);

 

根据模型创建java对象。

Father.java:

package org.py.hib.relation.one2many;

import java.util.HashSet;
import java.util.Set;

/**
 * Father entity.
 */

@SuppressWarnings("serial")
public class Father implements java.io.Serializable
{
	private String id;

	private String name;

	private Set<Child> children = new HashSet<Child>(0);

	public Father()
	{
	}

	public String getId()
	{
		return this.id;
	}

	public void setId(String id)
	{
		this.id = id;
	}

	public String getName()
	{
		return this.name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

	public Set<Child> getChildren()
	{
		return children;
	}

	public void setChildren(Set<Child> children)
	{
		this.children = children;
	}
}

 

 Child.java:

package org.py.hib.relation.one2many;

/**
 * Child entity.
 * @author MyEclipse Persistence Tools
 */

@SuppressWarnings("serial")
public class Child implements java.io.Serializable
{
	private String id;

	private String name;

	private Father father;

	public Child()
	{
	}

	public String getId()
	{
		return this.id;
	}

	public void setId(String id)
	{
		this.id = id;
	}

	public Father getFather()
	{
		return this.father;
	}

	public void setFather(Father father)
	{
		this.father = father;
	}

	public String getName()
	{
		return this.name;
	}

	public void setName(String name)
	{
		this.name = name;
	}

}

 

映射文件如下:

Father.hbm.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="org.py.hib.relation.one2many.Father" table="father">
        <id name="id" type="java.lang.String" column="id" length="32">
            <generator class="uuid" />
        </id>

        <property name="name" type="java.lang.String" column="name" length="32" not-null="true"/>
        
	<set name="children" table="child" cascade="all" inverse="true">
            <key column="father_id" />
            <one-to-many class="org.py.hib.relation.one2many.Child" />
        </set>
    </class>
</hibernate-mapping>

这里要说说 "set" 这个标签里面的内容。

"name"是Father里面的属性的名字。

"table"表示它对应的是数据库中的哪个表。

cascade="all" 表示所有的操作都级联操作。

"inverse"表示关系的维护由谁来执行。true表示不由自己执行,而有对应的另外一方执行。false则相反,表示由自己维护关系。这里设置成 true 是由原因的。如果说把它设置成为false,那么就由他来维护关系了。

这里得说一下inverse属性的问题。在one-to-many中,如果关系由one来维护,那么会很麻烦,性能也会很低。每次对many一方的一条记录进行增、删、改 时都会多一次update操作。原因很简单,因为关系的维护设置在了one这一方,所以对many的每一次操作,one这一方都要维护一次双方的关系。

这个就好像皇帝和老百姓的关系。试问,是来一个老百姓,皇帝就宣布他是我的子民,还是由老百姓直接选择做那个皇帝的子民更加有效率呢?呵呵。不知道这个例子大家有没有明白。关于inverse的更具体的说明,在javaeye上搜一下,就会发现有很多。这里推荐一篇,我认为讲得很明白的:主题:inverse。

"key" 中的 "column" 表示在table(这里的table是child)中, 跟Father关联的字段名称。这里是"father_id"。可以看看开始的sql脚本。

one-to-many 表示father和children的关系。class则表示是同哪个类是这种关系。

 

 Child.hbm.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>
    <class name="org.py.hib.relation.one2many.Child" table="child">
        <id name="id" type="java.lang.String" column="id" length="32" >
            <generator class="uuid" />
        </id>
        <property name="name" type="java.lang.String" column="name" length="128" not-null="true"/>

        <many-to-one name="father" class="org.py.hib.relation.one2many.Father" column="father_id" />
    </class>
</hibernate-mapping>

 这个里面主要就是多了一个many-to-one,表示child 和 father 的关系是"many-to-one"

 

测试代码如下:

One2ManyTest.java

package org.py.hib.relation.one2many;

import java.util.Set;

import junit.framework.Assert;
import junit.framework.TestCase;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
import org.junit.After;
import org.junit.Before;

public class One2ManyTest extends TestCase
{
	private SessionFactory factory;

	private static final String[] childname = new String[] { "child_1", "child_2", "child_3" };

	private static final String[] newchildname = new String[] { "new_child_1", "new_child_2", "new_child_3" };

	@Before
	public void setUp() throws Exception
	{
		Configuration conf = new Configuration().configure();
		factory = conf.buildSessionFactory();
	}

	/**
	 * 测试添加
	 * @throws Exception
	 */
	public void testSave() throws Exception
	{
		System.out.println("\n=== test save ===");

		Father father = new Father();
		father.setName("Father_1");

		Child child1 = new Child();
		child1.setName(childname[0]);

		Child child2 = new Child();
		child2.setName(childname[1]);

		Child child3 = new Child();
		child3.setName(childname[2]);

		father.getChildren().add(child1);
		father.getChildren().add(child2);
		father.getChildren().add(child3);

		child1.setFather(father);
		child2.setFather(father);
		child3.setFather(father);

		Session session = null;
		Transaction tran = null;
		try
		{
			session = factory.openSession();
			tran = session.beginTransaction();
			session.save(father);

			tran.commit();

			Assert.assertNotNull(father.getId());

			Assert.assertNotNull(child1.getId());
			Assert.assertNotNull(child2.getId());
			Assert.assertNotNull(child3.getId());

		} catch (Exception ex)
		{
			tran.rollback();
			throw ex;
		} finally
		{
			if (session != null)
			{
				try
				{
					session.close();
				} catch (Exception ex)
				{
					// nothing to do
				} finally
				{
					if (session != null)
						session = null;
				}
			}
		}
	}

	private boolean isChildrenName(String name)
	{
		for (String n : childname)
		{
			if (n.equals(name))
				return true;
		}

		return false;
	}

	private boolean isNewChildrenName(String name)
	{
		for (String n : newchildname)
		{
			if (n.equals(name))
				return true;
		}

		return false;
	}

	/**
	 * 测试查询
	 * @throws Exception
	 */
	public void testFind() throws Exception
	{
		System.out.println("\n=== test find ===");
		Session session = null;
		try
		{
			session = factory.openSession();
			Father father = (Father) session.createQuery("from Father").list().get(0);

			Assert.assertNotNull(father.getId());
			Assert.assertEquals("Father_1", father.getName());

			Set<Child> children = father.getChildren();
			for (Child child : children)
			{
				Assert.assertEquals(child.getFather(), father);

				Assert.assertNotNull(child.getId());

				Assert.assertTrue(isChildrenName(child.getName()));
			}
		} catch (Exception ex)
		{
			throw ex;
		} finally
		{
			if (session != null)
			{
				try
				{
					session.close();
				} catch (Exception ex)
				{
					// nothing to do
				} finally
				{
					if (session != null)
						session = null;
				}
			}
		}
	}

	/**
	 * 测试修改
	 * @throws Exception
	 */
	public void testModify() throws Exception
	{
		System.out.println("\n=== test modify ===");
		Session session = null;
		Transaction tran = null;
		try
		{
			session = factory.openSession();
			tran = session.beginTransaction();

			Father father = (Father) session.createQuery("from Father").list().get(0);
			father.setName("Father_2"); // 修改用户名 = m_name2.(原来用户名= m_name)

			Set<Child> children = father.getChildren();
			int i = 0;
			for (Child child : children)
			{
				child.setName(newchildname[i++]);
			}

			tran.commit();

		} catch (Exception ex)
		{
			throw ex;
		} finally
		{
			if (session != null)
			{
				try
				{
					session.close();
				} catch (Exception ex)
				{
					// nothing to do
				} finally
				{
					if (session != null)
						session = null;
				}
			}
		}

		/*
		 * 修改后再查询
		 */
		System.out.println("\n=== test find after modify ===");
		try
		{
			session = factory.openSession();
			Father father = (Father) session.createQuery("from Father").list().get(0);

			Assert.assertNotNull(father.getId());
			Assert.assertEquals("Father_2", father.getName());

			Set<Child> children = father.getChildren();

			for (Child child : children)
			{
				Assert.assertEquals(child.getFather(), father);

				Assert.assertNotNull(child.getId());

				Assert.assertTrue(isNewChildrenName(child.getName()));
			}

		} catch (Exception ex)
		{
			throw ex;
		} finally
		{
			if (session != null)
			{
				try
				{
					session.close();
				} catch (Exception ex)
				{
					// nothing to do
				} finally
				{
					if (session != null)
						session = null;
				}
			}
		}
	}

	/**
	 * 测试删除
	 * @throws Exception
	 */
	public void testDelete() throws Exception
	{
		System.out.println("\n=== test delete ===");
		Session session = null;
		Transaction tran = null;
		try
		{
			session = factory.openSession();
			tran = session.beginTransaction();

			Father father = (Father) session.createQuery("from Father").list().get(0);
			session.delete(father);
			tran.commit();

		} catch (Exception ex)
		{
			throw ex;
		} finally
		{
			if (session != null)
			{
				try
				{
					session.close();
				} catch (Exception ex)
				{
					// nothing to do
				} finally
				{
					if (session != null)
						session = null;
				}
			}
		}

		/*
		 * 删除后再查询
		 */
		System.out.println("\n=== test find after delete ===");
		try
		{
			session = factory.openSession();

			Integer num = (Integer) session.createQuery("from Father").list().size();
			Assert.assertEquals(0, num.intValue());

			num = (Integer) session.createQuery("from Child").list().size();
			Assert.assertEquals(0, num.intValue());

		} catch (Exception ex)
		{
			throw ex;
		} finally
		{
			if (session != null)
			{
				try
				{
					session.close();
				} catch (Exception ex)
				{
					// nothing to do
				} finally
				{
					if (session != null)
						session = null;
				}
			}
		}
	}

	/**
	 * 
	 */
	@After
	public void tearDown() throws Exception
	{
		factory.close();
	}

}
 

这里不得不再重申以下 one-to-many 中 inverse 关系的维护问题。 在one-to-many中,把inverse放到many中来维护是一个好的习惯。大家可以把上面的inverse改成false,看看会发生什么情况。

在inverse=true的时候,输出结果如下:

=== test save ===
Hibernate: insert into father (name, id) values (?, ?)
Hibernate: insert into child (name, father_id, id) values (?, ?, ?)
Hibernate: insert into child (name, father_id, id) values (?, ?, ?)
Hibernate: insert into child (name, father_id, id) values (?, ?, ?)

=== test find ===
Hibernate: select father0_.id as id13_, father0_.name as name13_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id14_0_, children0_.name as name14_0_, children0_.father_id as father3_14_0_ from child children0_ where children0_.father_id=?

=== test modify ===
Hibernate: select father0_.id as id23_, father0_.name as name23_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id24_0_, children0_.name as name24_0_, children0_.father_id as father3_24_0_ from child children0_ where children0_.father_id=?
Hibernate: update father set name=? where id=?
Hibernate: update child set name=?, father_id=? where id=?
Hibernate: update child set name=?, father_id=? where id=?
Hibernate: update child set name=?, father_id=? where id=?

=== test find after modify ===
Hibernate: select father0_.id as id23_, father0_.name as name23_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id24_0_, children0_.name as name24_0_, children0_.father_id as father3_24_0_ from child children0_ where children0_.father_id=?

=== test delete ===
Hibernate: select father0_.id as id33_, father0_.name as name33_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id34_0_, children0_.name as name34_0_, children0_.father_id as father3_34_0_ from child children0_ where children0_.father_id=?
Hibernate: delete from child where id=?
Hibernate: delete from child where id=?
Hibernate: delete from child where id=?
Hibernate: delete from father where id=?

=== test find after delete ===
Hibernate: select father0_.id as id33_, father0_.name as name33_ from father father0_
Hibernate: select child0_.id as id34_, child0_.name as name34_, child0_.father_id as father3_34_ from child child0_
 

而改成 inverse=false后,testDelete()是没法通过的。输出如下:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.

=== test save ===
Hibernate: insert into father (name, id) values (?, ?)
Hibernate: insert into child (name, father_id, id) values (?, ?, ?)
Hibernate: insert into child (name, father_id, id) values (?, ?, ?)
Hibernate: insert into child (name, father_id, id) values (?, ?, ?)
Hibernate: update child set father_id=? where id=?
Hibernate: update child set father_id=? where id=?
Hibernate: update child set father_id=? where id=?

=== test find ===
Hibernate: select father0_.id as id13_, father0_.name as name13_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id14_0_, children0_.name as name14_0_, children0_.father_id as father3_14_0_ from child children0_ where children0_.father_id=?

=== test modify ===
Hibernate: select father0_.id as id23_, father0_.name as name23_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id24_0_, children0_.name as name24_0_, children0_.father_id as father3_24_0_ from child children0_ where children0_.father_id=?
Hibernate: update father set name=? where id=?
Hibernate: update child set name=?, father_id=? where id=?
Hibernate: update child set name=?, father_id=? where id=?
Hibernate: update child set name=?, father_id=? where id=?

=== test find after modify ===
Hibernate: select father0_.id as id23_, father0_.name as name23_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id24_0_, children0_.name as name24_0_, children0_.father_id as father3_24_0_ from child children0_ where children0_.father_id=?

=== test delete ===
Hibernate: select father0_.id as id33_, father0_.name as name33_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id34_0_, children0_.name as name34_0_, children0_.father_id as father3_34_0_ from child children0_ where children0_.father_id=?
Hibernate: update child set father_id=null where father_id=?

 错误信息如下:

具体的出错原因是:违反了非空约束。

得修改sql脚本,把Child的建表脚本中的:

                     father_id varchar(32) not null, 修改成为:father_id varchar(32),

才能通过。这个时候输出的结果是:

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.

=== test save ===
Hibernate: insert into father (name, id) values (?, ?)
Hibernate: insert into child (name, father_id, id) values (?, ?, ?)
Hibernate: insert into child (name, father_id, id) values (?, ?, ?)
Hibernate: insert into child (name, father_id, id) values (?, ?, ?)
Hibernate: update child set father_id=? where id=?
Hibernate: update child set father_id=? where id=?
Hibernate: update child set father_id=? where id=?

=== test find ===
Hibernate: select father0_.id as id13_, father0_.name as name13_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id14_0_, children0_.name as name14_0_, children0_.father_id as father3_14_0_ from child children0_ where children0_.father_id=?

=== test modify ===
Hibernate: select father0_.id as id23_, father0_.name as name23_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id24_0_, children0_.name as name24_0_, children0_.father_id as father3_24_0_ from child children0_ where children0_.father_id=?
Hibernate: update father set name=? where id=?
Hibernate: update child set name=?, father_id=? where id=?
Hibernate: update child set name=?, father_id=? where id=?
Hibernate: update child set name=?, father_id=? where id=?

=== test find after modify ===
Hibernate: select father0_.id as id23_, father0_.name as name23_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id24_0_, children0_.name as name24_0_, children0_.father_id as father3_24_0_ from child children0_ where children0_.father_id=?

=== test delete ===
Hibernate: select father0_.id as id33_, father0_.name as name33_ from father father0_
Hibernate: select children0_.father_id as father3_1_, children0_.id as id1_, children0_.id as id34_0_, children0_.name as name34_0_, children0_.father_id as father3_34_0_ from child children0_ where children0_.father_id=?
Hibernate: update child set father_id=null where father_id=?
Hibernate: delete from child where id=?
Hibernate: delete from child where id=?
Hibernate: delete from child where id=?
Hibernate: delete from father where id=?

=== test find after delete ===
Hibernate: select father0_.id as id33_, father0_.name as name33_ from father father0_
Hibernate: select child0_.id as id34_, child0_.name as name34_, child0_.father_id as father3_34_ from child child0_
 

所以,inverse的设置是很重要的一个事情。

附件中包含了源代码。这里说明一下。源代码中没有包含数据库驱动的jar包和hibernate3.1的jar包。需要大家自己添加。

 

  • 大小: 75 KB
  • 大小: 3.1 KB
分享到:
评论
12 楼 xiaojiit 2008-12-04  
能不能写一个用DetachedCriteria进行查询的例子呢?谢谢了!
11 楼 流浪者A 2008-11-05  
这个例子经常见到,很容易理解,很好的例子~·
10 楼 rmn190 2008-10-30  
一个问题:
   现在你例子中是双向关联, 也就是说child类有对father类的引向, 这样在Child.hbm.xml中就有了<many-to-one name="father" class="org.py.hib.relation.one2many.Father" column="father_id" />, 这里的inverse是默认为false的. 这时两表间的引用由child类的setFather触发.

  若业务要求为单向关联,也就是说在child这边不再有father的引用, 这样一来两表间的关联关系只能由father类来维护了, 当然在<set name="children" table="child" cascade="all" >里的inverse默认为false的, 可这样做效率上是受影响的:  当加child集合时hibernate得去检查看哪个child与father的关系有改变, 而假若由child这边来维护的话,就不会有这样效率方面的问题.

  可在child的配置里若没有对father的引用后,我们也就无从下手了,不能两全其美.
9 楼 liucl_tiger 2008-10-24  
  for (String n : newchildname)  
这是什么意思?
还有就是我最也出了一个错,请帮我看一下,这是什么错误!
org.springframework.orm.hibernate3.HibernateSystemException: Unknown entity: java.lang.String; nested exception is org.hibernate.MappingException: Unknown entity: java.lang.String
org.hibernate.MappingException: Unknown entity: java.lang.String
8 楼 LuckyAngel 2008-10-24  
Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList
我的程序中出现这个错误,是什么意思?请教一下
我用的是一对多关系映射,一的这方用的是List集合
7 楼 kingkongmok 2008-09-25  
请问,如何实现如下查询呢?谢谢

SELECT f.name, c.name FROM Father f, Child c WHERE f.id = c.father_id;

查了好多天没头绪,请高手们不吝指教!
6 楼 RyanPoy 2008-06-17  
wm920 写道

我要是实现自定义表的字段···怎么实现咯 ··


不明白什么叫自定义表的字段。能否举一例?

wm920 写道

他们的数据能进行查进去 么 ,因为表的关联是一下子取(通SET与GET)全部的数据···  会报SQL语句的异常

表的关联可以不一下子全取。hibernate提供了 延迟处理。3版本后默认为lazy。

关于lazy的用法参看这个,http://www.hibernate.org/162.html

5 楼 RyanPoy 2008-06-17  
e3002 写道
你好。最近遇到个问题。也是一对多双向关联的问题,举例
一个题目可以有a。b。c。d四个选项。题目类:subject 选项类 chooseItem
用户第一次建立题目是 可能是这样、
那个省人口最多
A.河南
B.河北
C.湖北
D.湖南
ok。保存入库,但用户下次修改时
可能如下
那个省人口最多
A.河南
B.河北
注意:只剩下两个选项 到此,此时的操作应该包括删除和修改多方的操作,这个hibernate能自动处理吗?该怎么处理?请赐教



完全可以。看帖子里面的测试代码。里面有完整的增删该查。你可以仿照从而写出你的业务逻辑。
4 楼 wm920 2008-06-16  
请问下 ···

我要是实现自定义表的字段···怎么实现咯 ··
他们的数据能进行查进去 么 ,因为表的关联是一下子取(通SET与GET)全部的数据···  会报SQL语句的异常···
3 楼 e3002 2008-05-27  
我的msn:e3002@163.com 希望能交流
2 楼 e3002 2008-05-27  
你好。最近遇到个问题。也是一对多双向关联的问题,举例
一个题目可以有a。b。c。d四个选项。题目类:subject 选项类 chooseItem
用户第一次建立题目是 可能是这样、
那个省人口最多
A.河南
B.河北
C.湖北
D.湖南
ok。保存入库,但用户下次修改时
可能如下
那个省人口最多
A.河南
B.河北
注意:只剩下两个选项 到此,此时的操作应该包括删除和修改多方的操作,这个hibernate能自动处理吗?该怎么处理?请赐教

1 楼 hantsy 2008-05-10  
<p>在这种one to many 的双向关联中,按照需求,更符合Hibernate的作法是还要在你的 Child 映射文件的关联中加上not-null="true"的约束。</p>
<p>如果是单向的one to many 关联(没有Child 到Parent 的关联),这个约束可以加在Parent的映射文件的set定义中去。</p>

相关推荐

    Hibernate入门.docx

    既然Hibernate是关于Java对象和关系数据库之间的联系的话,也就是 我们MVC中的数据持久层- &gt;在编写程序中的DAO层... 首先,我们来回顾一下我们在DAO层写程序的历程吧: 1.在DAO层操作XML,将数据封装到XML文件上,...

    hibernate3.2中文文档(chm格式)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate_3.2.0_符合Java习惯的关系数据库持久化

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate+中文文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    HibernateAPI中文版.chm

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    Hibernate中文详细学习文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    hibernate基础

    本书介绍了轻量级开源框架Hibernate3的功能,主要内容包括Hibernate的基本体系结构、如何使用Java5注解和基于XML的映射文件来表示映射信息,并讨论了HibernateSession对象和HQL的使用。本书适合Java开发人员阅读。 ...

    Hibernate 中文 html 帮助文档

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (3)

    6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...

    Struts2+Spring+Hibernate整合入门详解

    Hibernate 是一个纯 Java 的对象关系映射和持久性框架,它允许您用 XML 配置文件把普通 Java 对象映射到关系数据库表。使用 Hibernate 能够节约大量项目开发时间,因为整个 JDBC 层都由这个框架管理。这意味着您的...

    hibernate+中文api

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (1)

    6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...

    Hibernate框架参考文档

    1. Hibernate入门; 2. 体系结构(Architecture); 3. 配置; 4. 持久化类(Persistent Classes); 5. 对象/关系数据库映射基础(Basic O/R Mapping); 6. 集合类(Collections)映射; 7. 关联关系映射; 8. 组件(Component)...

    hibernate 体系结构与配置 参考文档(html)

    1. Hibernate入门 1.1. 前言 1.2. 第一部分 - 第一个Hibernate应用程序 1.2.1. 第一个class 1.2.2. 映射文件 1.2.3. Hibernate配置 1.2.4. 用Ant构建 1.2.5. 启动和辅助类 1.2.6. 加载并存储对象 1.3. 第...

    搞定J2EE:STRUTS+SPRING+HIBERNATE整合详解与典型案例 (2)

    6.3.6 在代码中使用Log4j 6.4 改进Log4j 6.5 小结 第七章 Ant使用指南 7.1 Ant介绍 7.1.1 Ant简介 7.1.2 为什么要使用Ant 7.2 建立Ant的开发环境 7.2.1 下载Ant 7.2.2 配置Ant 7.3 Ant的使用方法 7.3.1 Ant能完成的...

    Hibernate教程

    2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 ...

    Hibernate O/R Mapping 入门工程包

    Hibernate 快速入门的工程包 包括用xml和annotation映射数据表

    Hibernate框架介绍以及入门 【二】Hibernate的常见配置

    Hibernate框架介绍以及入门 【二】 Hibernate的常见配置 一、关于XML提示的配置 1、配置hibernate-mapping-3.0.dtd – XML 配置这三个地方 第一个;location 第二个:URL 第三个: 2、配置hibernate-...

    hibernate3.04中文文档.chm

    2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. ...

    Hibernate3的帮助文档

    2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 ...

Global site tag (gtag.js) - Google Analytics