hibernate遇到郁闷问题了.删除不行.急啊.

cqddklx 2008-04-18 01:34:51
有3张表
nuser表代表用户表,id为主键,自增.其中有个username的字段.
shenfenzheng代表身份证表.id为主键,自增.里面有shenfenzhenghao字段代表身份证号,userid代表关联到nuser表的id,外键,
还有个dingdan表代表定单表,id为主键,自增.里面有个dingdanhao字段,有个userid字段关联到nuser表的id,外键.

这个关系是nuser表和shenfenzheng表是一对一关系,nuser和dingdan是一对多关系,

程序代码如下

//删除的类
public class DeleteUser
{
public void deleteUser(Integer id)
{
Session session=CreateSession.createSession();
Nuser nuser=(Nuser) session.get(Nuser.class, id);
//Hibernate.initialize(nuser.getDingdan());
Transaction tx=null;
try
{
tx=session.beginTransaction();
session.delete(nuser);
session.flush();
tx.commit();
}
catch(Exception e)
{
if(tx!=null)
tx.rollback();
System.out.println(e.getMessage());
}
finally{
session.close();
}
}
}




<hibernate-mapping>
<class name="databasepo.Nuser" table="nuser" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"></generator>
</id>
<property name="username" type="java.lang.String">
<column name="username" length="20" not-null="true" />
</property>
<one-to-one name="shenfenzheng" class="databasepo.Shenfenzheng" cascade="all" property-ref="nuser"/>
<set name="dingdan" order-by="id" cascade="delete">
<key column="userid"/>
<one-to-many class="databasepo.Dingdan"/>
</set>
</class>
</hibernate-mapping>



<hibernate-mapping>
<class name="databasepo.Dingdan" table="dingdan" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"></generator>
</id>
<property name="userid" type="java.lang.Long">
<column name="userid" not-null="true" />
</property>
</class>
</hibernate-mapping>




<hibernate-mapping>
<class name="databasepo.Shenfenzheng" table="shenfenzheng" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"></generator>
</id>
<property name="shenfenzhenghao" type="java.lang.String">
<column name="shenfenzhenghao" length="20" not-null="true" />
</property>
<many-to-one name="nuser" class="databasepo.Nuser" unique="true" column="userid"/>
</class>
</hibernate-mapping>




执行的时候删除数据的日志如下
Hibernate: select nuser0_.id as id0_1_, nuser0_.username as username0_1_, shenfenzhe1_.id as id2_0_, shenfenzhe1_.shenfenzhenghao as shenfenz2_2_0_, shenfenzhe1_.userid as userid2_0_ from hibernate.nuser nuser0_ left outer join hibernate.shenfenzheng shenfenzhe1_ on nuser0_.id=shenfenzhe1_.userid where nuser0_.id=?
Hibernate: select dingdan0_.userid as userid1_, dingdan0_.id as id1_, dingdan0_.id as id1_0_, dingdan0_.userid as userid1_0_ from hibernate.dingdan dingdan0_ where dingdan0_.userid=? order by dingdan0_.id
Hibernate: update hibernate.dingdan set userid=null where userid=?
Could not execute JDBC batch update




Could not execute JDBC batch update.这个是怎么回事呢?
...全文
177 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
cqddklx 2008-04-18
  • 打赏
  • 举报
回复
我用的是单向关联,如果inverse=true了后不是没控制方了吗?
Leo1734 2008-04-18
  • 打赏
  • 举报
回复
在Nuser.hbm.xml的one-to-many中加inverse=true,另一个加inverse=false
cqddklx 2008-04-18
  • 打赏
  • 举报
回复
他第一句不就是
你在这几个*.hbm.xml文件中的一对多,一对一中加上lazy="false"就可以了
这样写的吗?
li_d_s 2008-04-18
  • 打赏
  • 举报
回复
眼神儿没那么差吧?人家让你加cascade,你来了句"加上lazy="false"了后..."
cqddklx 2008-04-18
  • 打赏
  • 举报
回复
加上lazy="false"了后删除也还是报那个错.
cqddklx 2008-04-18
  • 打赏
  • 举报
回复
换成all的时候我添加用户的时候是不添加定单的.如果这样只添加用户和身份证会报错的.怎么办呢?
Kit_LO 2008-04-18
  • 打赏
  • 举报
回复
你在这几个*.hbm.xml文件中的一对多,一对一中加上lazy="false"就可以了
<hibernate-mapping>
<class name="databasepo.Nuser" table="nuser" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"> </generator>
</id>
<property name="username" type="java.lang.String">
<column name="username" length="20" not-null="true" />
</property>
<one-to-one name="shenfenzheng" class="databasepo.Shenfenzheng" cascade="all" property-ref="nuser"/>
<set name="dingdan" order-by="id" cascade="delete">
<key column="userid"/>
<one-to-many class="databasepo.Dingdan"/>
</set>
</class>
</hibernate-mapping>

红色delete最好换成all ,因为,如果用户都不存在了,身份证与订单也就没有了
上面那个复制错了
Kit_LO 2008-04-18
  • 打赏
  • 举报
回复
你在这几个*.hbm.xml文件中的一对多,一对一中加上lazy="false"就可以了
<class name="databasepo.Nuser" table="nuser" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"> </generator>
</id>
<property name="username" type="java.lang.String">
<column name="username" length="20" not-null="true" />
</property>
<one-to-one name="shenfenzheng" class="databasepo.Shenfenzheng" cascade="all" property-ref="nuser"/>
<set name="dingdan" order-by="id" cascade="delete"> // <class name="databasepo.Nuser" table="nuser" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"> </generator>
</id>
<property name="username" type="java.lang.String">
<column name="username" length="20" not-null="true" />
</property>
<one-to-one name="shenfenzheng" class="databasepo.Shenfenzheng" cascade="all" property-ref="nuser"/>
<set name="dingdan" order-by="id" cascade="delete">
<key column="userid"/>
<one-to-many class="databasepo.Dingdan"/>
</set>
</class>

<key column="userid"/>
<one-to-many class="databasepo.Dingdan"/>
</set>
</class>
红色delete最好换成all ,因为,如果用户都不存在了,身份证与订单也就没有了
Kit_LO 2008-04-18
  • 打赏
  • 举报
回复
你在这几个*.hbm.xml文件中的一对多,一对一中加上lazy="false"就可以了
<class name="databasepo.Nuser" table="nuser" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"> </generator>
</id>
<property name="username" type="java.lang.String">
<column name="username" length="20" not-null="true" />
</property>
<one-to-one name="shenfenzheng" class="databasepo.Shenfenzheng" cascade="all" property-ref="nuser"/>
<set name="dingdan" order-by="id" cascade="delete"> // <class name="databasepo.Nuser" table="nuser" catalog="hibernate">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="native"> </generator>
</id>
<property name="username" type="java.lang.String">
<column name="username" length="20" not-null="true" />
</property>
<one-to-one name="shenfenzheng" class="databasepo.Shenfenzheng" cascade="all" property-ref="nuser"/>
<set name="dingdan" order-by="id" cascade="delete">
<key column="userid"/>
<one-to-many class="databasepo.Dingdan"/>
</set>
</class>

<key column="userid"/>
<one-to-many class="databasepo.Dingdan"/>
</set>
</class>
红色delete最好换成all ,因为,如果用户都不存在了,身份证与订单也就没有了

81,115

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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