Book和Type类。Book类配置映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="entity">
<class name="Book" table="tbl_book">
<id name="id" column="b_id">
<generator class="native"></generator>
</id>
<property name="title" column="b_title" />
<property name="author" column="b_author" />
<property name="price" column="b_price" />
<many-to-one name="type" class="Type" cascade="all" column="b_typeId" lazy="false" fetch="join" ></many-to-one>
</class>
</hibernate-mapping>Type类配置映射文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC 
    "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="entity"><class name="Type" table="tbl_type">
<id name="id" column="t_id">
<generator class="native"></generator>
</id>
<property name="name" column="t_name"></property>
<set name="books" inverse="true" cascade="all">
<key column="b_typeId"></key>
<one-to-many class="Book" />
</set>
</class></hibernate-mapping>程序执行的的代码:public int deleteTypeById(int id){
Session session = HibernateSessionFactory.getSession();
String hql = "delete from Type as type where type.id = ?";
Query query = session.createQuery(hql);
query.setInteger(0,id);
int num = (Integer)query.executeUpdate();
session.getTransaction().begin();
session.getTransaction().commit();
HibernateSessionFactory.closeSession();
return num;
}报错如下:com.microsoft.sqlserver.jdbc.SQLServerException: DELETE 语句与 REFERENCE 约束"FK_tbl_book_tbl_type"冲突。该冲突发生于数据库"BookDB",表"dbo.tbl_book", column 'b_typeId'。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement$PrepStmtExecCmd.doExecute(Unknown Source)
at com.microsoft.sqlserver.jdbc.TDSCommand.execute(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeCommand(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.executeStatement(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeUpdate(Unknown Source)
at org.hibernate.hql.ast.exec.BasicExecutor.execute(BasicExecutor.java:75)
at org.hibernate.hql.ast.QueryTranslatorImpl.executeUpdate(QueryTranslatorImpl.java:334)
at org.hibernate.engine.query.HQLQueryPlan.performExecuteUpdate(HQLQueryPlan.java:209)
at org.hibernate.impl.SessionImpl.executeUpdate(SessionImpl.java:1126)
at org.hibernate.impl.QueryImpl.executeUpdate(QueryImpl.java:94)
at dao.TypeDao.deleteTypeById(TypeDao.java:43)
at biz.TypeBiz.deleteTypeById(TypeBiz.java:26)
at web.action.TypeAction.delete(TypeAction.java:66)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:270)
at org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:187)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:230)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:261)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:581)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:619)跪求各位帮忙解决!!!!!

解决方案 »

  1.   

    <one-to-many class="Book" />
    </set>
    加上cascade="all" 试下
      

  2.   


    http://www.diybl.com/course/3_program/java/javashl/2008326/107345.html
    因为你的这个TYPE表中的ID在Book表有映射、两者存在主外键关系、如果你将TYPE表中的数据删除、会破坏数据的完整性!
        又因为你在两表之间建立了主外键约束、所以你删除主表的数据、就会报错、!
      

  3.   

    <set name="books" inverse="true" cascade="all">
    inverse 有两个值 true ,false  ;如果设置为true 则表示当前对象不负责将级联对象的状态变化同步到数据库 ;设置false则相反,其默认值为false;   设置为false看看!!!
      

  4.   

    外键约束,不让删除:FK_tbl_book_tbl_type
    外键在BookDB.dbo.tbl_book的column 'b_typeId'
      

  5.   

    外键关联不能删啊 ,删了book表的type字段还混个毛啊,你可以想想