hibernate级联插入数据

zhaolb2002 2007-08-29 05:44:44
TUser.hbm.xml:
<hibernate-mapping>
<class name="com.TUser" table="T_User" schema="dbo" catalog="Sample">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<set name="addresses" table="T_Address" lazy="false" inverse="true" cascade="all">
<key column="user_id"></key>
<one-to-many class="com.TAddress"/>
</set>
<property name="name" type="java.lang.String">
<column name="name" length="50" />
</property>
<property name="age" type="java.lang.Integer">
<column name="age" />
</property>
<property name="groupId" type="java.lang.Integer">
<column name="group_id" />
</property>
</class>
</hibernate-mapping>

TAddress.hbm.xml
<hibernate-mapping>
<class name="com.TAddress" table="T_Address" schema="dbo" catalog="Sample">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native" />
</id>
<property name="zipcode" type="java.lang.String">
<column name="zipcode" length="50" />
</property>
<property name="tel" type="java.lang.String">
<column name="tel" length="50" />
</property>

<many-to-one name="user"
class="com.TUser"
cascade="none"
column="user_id"
insert="true"
update="true"
outer-join="auto"
access="property"
/>
</class>
</hibernate-mapping>

我想实现给一个已有用户添加一个地址的功能。用到了以下的测试程序:
Configuration cf = new Configuration().configure();
SessionFactory sf=cf.buildSessionFactory();
Session session = sf.openSession();
Transaction tx= session.beginTransaction();

TUser user= (TUser)session.get(TUser.class, 2);
System.out.println(user.getId().intValue());
TAddress address=new TAddress();
address.setTel("123456789");
address.setZipcode("100083");
address.setUser(user);
user.getAddresses().add(user);
session.save(user);
tx.commit();
可是程序执行后,数据库T_Address没有任何数据,不知道是什么原因?还请指教!
...全文
358 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaolb2002 2007-08-30
  • 打赏
  • 举报
回复
试过了,还是不行
下面是出现的hibernate,sql语句:
Hibernate: select tuser0_.id as id1_0_, tuser0_.name as name1_0_, tuser0_.age as age1_0_, tuser0_.group_id as group4_1_0_ from Sample.dbo.T_User tuser0_ where tuser0_.id=?
Hibernate: select addresses0_.user_id as user4_1_, addresses0_.id as id1_, addresses0_.id as id0_0_, addresses0_.zipcode as zipcode0_0_, addresses0_.tel as tel0_0_, addresses0_.user_id as user4_0_0_ from Sample.dbo.T_Address addresses0_ where addresses0_.user_id=?
fuyujianxia 2007-08-30
  • 打赏
  • 举报
回复
关联字段搞错了吧

<set name="addresses" table="T_Address" lazy="false" inverse="true" cascade="all">
<key column="user_id"></key> // user_id 应为 id
<one-to-many class="com.TAddress"/>
</set>

<many-to-one name="user"
class="com.TUser"
cascade="none"
column="user_id" //此处user_id 应为 id
insert="true"
update="true"
outer-join="auto"
access="property"
/>
gougou8180 2007-08-29
  • 打赏
  • 举报
回复
用user插入
Set set = new HashSet();
set.add(new TAddress());
set.add(new TAddress());
set.add(new TAddress());
set.add(new TAddress());
user.setAddresses(set);
session.save(user);
gougou8180 2007-08-29
  • 打赏
  • 举报
回复
TUser.hbm.xml:
<set name="addresses" table="T_Address" lazy="false" inverse="false" cascade="all">
marcodeba 2007-08-29
  • 打赏
  • 举报
回复
把cascade="none"设置成cascade="save-update"试试

67,512

社区成员

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

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