疑惑不解之《初学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 呢?