疑惑不解之《初学Hibernate 》~~~
大家好,初学Hibernate
下面是一段"错误"的Hibernate代码
(Hibernate已设置 "show_sql=true" 和 "connection.autocommit=true")
我的问题,是在执行了下列错误代码的时候,
为什么控制台会显示 "一条update语句呢?" 即: 语句(二)
(一) Hibernate: insert into demo_ssh.customer (name, id) values (?, ?)
(二) Hibernate: update demo_ssh.address set id=? where id=?
(三) Exception in thread "main".............
以下是具体代码:
main()
{
org.hibernate.Session session = HibernateSessionFactory.getSession();
Customer c = new Customer();
c.setId("001");
c.setName("tester");
Address add = new Address();
add.setId("001");
add.setAddress("beijing");
java.util.Set set = new java.util.HashSet();
set.add(add);
c.setAddress(set);
session.save(c);
session.flush();
}
// ------------- Customer.hbm.xml -------------
<hibernate-mapping>
<class name="hibernate.vo.Customer" table="customer"
catalog="demo_ssh">
<id name="id" type="java.lang.String">
<column name="id" length="16" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="16" not-null="true" />
</property>
<set name="address" table="address" lazy="false">
<key column="id" />
<one-to-many class="hibernate.vo.Address" />
</set>
</class>
</hibernate-mapping>
// ------------- Address.hbm.xml -------------
<hibernate-mapping>
<class name="hibernate.vo.Address" table="address" catalog="demo_ssh">
<id name="id" type="java.lang.String">
<column name="id" length="16" />
<generator class="assigned" />
</id>
<property name="address" type="java.lang.String">
<column name="address" length="16" not-null="true" />
</property>
</class>
</hibernate-mapping>
我对上面的代码是这样分析的。。。不知道那里有错误。。。
(1)首先 new Customer 和 new Address 并将其初始化
(2)对one-to-many中的Set集合进行个操作 c.setAddress(set);
(3)插入Customer session.save(c);
(4)由于inverse属性默认为false,所以在最后的flush阶段,Hibernate会将其Set的变动,反映到数据库中。
请问,为什么会在第二条HQL中出现 update 呢?
下面是一段"错误"的Hibernate代码
(Hibernate已设置 "show_sql=true" 和 "connection.autocommit=true")
我的问题,是在执行了下列错误代码的时候,
为什么控制台会显示 "一条update语句呢?" 即: 语句(二)
(一) Hibernate: insert into demo_ssh.customer (name, id) values (?, ?)
(二) Hibernate: update demo_ssh.address set id=? where id=?
(三) Exception in thread "main".............
以下是具体代码:
main()
{
org.hibernate.Session session = HibernateSessionFactory.getSession();
Customer c = new Customer();
c.setId("001");
c.setName("tester");
Address add = new Address();
add.setId("001");
add.setAddress("beijing");
java.util.Set set = new java.util.HashSet();
set.add(add);
c.setAddress(set);
session.save(c);
session.flush();
}
// ------------- Customer.hbm.xml -------------
<hibernate-mapping>
<class name="hibernate.vo.Customer" table="customer"
catalog="demo_ssh">
<id name="id" type="java.lang.String">
<column name="id" length="16" />
<generator class="assigned" />
</id>
<property name="name" type="java.lang.String">
<column name="name" length="16" not-null="true" />
</property>
<set name="address" table="address" lazy="false">
<key column="id" />
<one-to-many class="hibernate.vo.Address" />
</set>
</class>
</hibernate-mapping>
// ------------- Address.hbm.xml -------------
<hibernate-mapping>
<class name="hibernate.vo.Address" table="address" catalog="demo_ssh">
<id name="id" type="java.lang.String">
<column name="id" length="16" />
<generator class="assigned" />
</id>
<property name="address" type="java.lang.String">
<column name="address" length="16" not-null="true" />
</property>
</class>
</hibernate-mapping>
我对上面的代码是这样分析的。。。不知道那里有错误。。。
(1)首先 new Customer 和 new Address 并将其初始化
(2)对one-to-many中的Set集合进行个操作 c.setAddress(set);
(3)插入Customer session.save(c);
(4)由于inverse属性默认为false,所以在最后的flush阶段,Hibernate会将其Set的变动,反映到数据库中。
请问,为什么会在第二条HQL中出现 update 呢?
...全文
相关推荐
hibernate初学者笔记
"hibernate初学者笔记"在深入探讨Hibernate框架之前,首先了解其核心概念——Session接口。Session是Hibernate中用于与数据库交互的主要接口,它提供了保存、更新、
初学Hibernate的例子,
【初学Hibernate的例子】Hibernate是Java领域中一个非常流行的持久化框架,它简化了数据库操作,使得开发者可以更专注于业务逻辑而不是数据存取的细节。
hibernate初学者很好的资料
这份资料对初学者来说是一个很好的起点,它将帮助你在短时间内理解和上手Hibernate的核心功能。
Hibernate初学笔记
### Hibernate初学笔记知识点概述#### 一、Hibernate环境的搭建- **1.1 引入基础Jar包** - **hibernate3.jar**:这是Hibernate的核心库,可以在
hibernate初学.ppt
"hibernate初学.ppt"在学习Hibernate这一Java持久化层技术时,首先要理解基于B/S(浏览器/服务器)架构的典型三层结构。这种结构通常包括展现层、业务逻辑层和数据持久化层。


