疑惑不解之《初学Hibernate 》~~~

xiaobaitu7788 2008-09-24 07:26:44
大家好,初学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 呢?
...全文
50 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
Johnson_Hong 2008-09-24
  • 打赏
  • 举报
回复
你把add.setId("001"); 去掉试一下
xiaobaitu7788 2008-09-24
  • 打赏
  • 举报
回复
为什么不是insert呢。
xiaobaitu7788 2008-09-24
  • 打赏
  • 举报
回复
为什么不是 先 一条 insert 然后在对刚才 insert的那条记录 update
Johnson_Hong 2008-09-24
  • 打赏
  • 举报
回复
你对address的id进行了设置,所以update了

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧