整合框架SSH2时,表之间建立了主外键关系。然后再hibernate中配好了主外键关系,但是总是添加不上。冒这样的错误
org.springframework.dao.DataIntegrityViolationException: could not insert: [com.tvlink.bean.Rmessage]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [com.tvlink.bean.Rmessage]
org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:636)
org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:424)
org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:694)
com.tvlink.dao.impl.MessageDaoimpl.AddRmessage(MessageDaoimpl.java:48)
com.tvlink.Service.impl.Messageimpl.AddRmessage(Messageimpl.java:56)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:106)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
$Proxy8.AddRmessage(Unknown Source)
com.tvlink.action.MessageAction.recall(MessageAction.java:108)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:441)
com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:280)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:243)
com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:165)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:252)
org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:122)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:195)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:235)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:89)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:130)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:126)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:138)
com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:87)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:165)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:179)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:237)
org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:488)
org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:395各位能不能帮我看看啊!非常感谢。我弄了1天了。

解决方案 »

  1.   

    映射文件贴出来!包括关联表的配置以及你的插入代码。同时先排查下以下情况:1、可以先把外键设置为可为空,测试下,看能否插入。如果可以,那就是外键设置的问题。2、看下是否有非空字段的限制。插入时设置为非空的字段在插入式为空也可能造成这样的错误。
    最后给你建议:在CSDN或google上搜下,看有相关的没。比如
    http://topic.csdn.net/u/20081218/16/99a4b208-57d3-4ba7-8e1b-20189535522b.html
    http://feiyan.iteye.com/blog/423332
    http://hi.baidu.com/zhongfc/blog/item/51638a084f2549a52eddd4c8.html
    等……
      

  2.   

    你当前保存的对象中,有关联属性,比如A对象中有个B对象的属性,我们将定认为的aa,现在的问题是,你的aa对象肯定只是一个new出来的对象,在其上面设置了一个id,然后你想保存A对象,这时候肯定是不行了。hibernate是面向对象的,你仅仅设置一个id就认为aa是对象了?必须先把aa从数据库查询出来,比如使用get(Domain.class,id)方法,然后A对象调用setAa方法将其设置进去,然后再保存,就OK了。你报的异常,就是这种原因。
      

  3.   

    这个是登陆时的表映射关系
    Userinfo.java代码如下
    public class Userinfo implements java.io.Serializable { // Fields private Integer userId;
    private String userName;
    private String userRelname;
    private String userPwd;
    private String userSex;
    private Integer userAge;
    private String userEdu;
    private String userFav;

    // Constructors
    public Integer getUserId() {
    return userId;
    }
    public void setUserId(Integer userId) {
    this.userId = userId;
    }
    public String getUserName() {
    return userName;
    }
    public void setUserName(String userName) {
    this.userName = userName;
    }
    public String getUserRelname() {
    return userRelname;
    }
    public void setUserRelname(String userRelname) {
    this.userRelname = userRelname;
    }
    public String getUserPwd() {
    return userPwd;
    }
    public void setUserPwd(String userPwd) {
    this.userPwd = userPwd;
    }
    public String getUserSex() {
    return userSex;
    }
    public void setUserSex(String userSex) {
    this.userSex = userSex;
    }
    public Integer getUserAge() {
    return userAge;
    }
    public void setUserAge(Integer userAge) {
    this.userAge = userAge;
    }
    public String getUserEdu() {
    return userEdu;
    }
    public void setUserEdu(String userEdu) {
    this.userEdu = userEdu;
    }
    public String getUserFav() {
    return userFav;
    }
    public void setUserFav(String userFav) {
    this.userFav = userFav;
    }Userinfo.hbm.xml代码如下
    <?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">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.tvlink.bean.Userinfo" table="Userinfo" catalog="test">
            <id name="userId" type="java.lang.Integer">
                <column name="user_Id" />
                <generator class="identity" />
            </id>      
            <property name="userName" type="java.lang.String">
                <column name="user_Name" length="20" />
            </property>
            
             <property name="userRelname" type="java.lang.String">
                <column name="user_Relname" length="20" />
            </property>
            
            <property name="userPwd" type="java.lang.String">
                <column name="user_Pwd" length="20" />
            </property>
           
            <property name="userSex" type="java.lang.String">
                <column name="user_Sex" length="20" />
            </property>
            
             <property name="userAge" type="java.lang.Integer">
                <column name="user_Age" />
            </property>
            
              <property name="userEdu" type="java.lang.String">
                <column name="user_Edu" length="20" />
            </property>
            
            <property name="userFav" type="java.lang.String">
                <column name="user_Fav" length="20" />
            </property>
            
         
        </class>
    </hibernate-mapping>
    这个是信息的映射关系
    Message.java代码如下
    public class Message {
    private int msgId;
    private String msgSubject;
    private java.sql.Date msgTime;
    private String msgContent;
    private int userId;
    private Userinfo userinfo; public Userinfo getUserinfo() {
    return userinfo;
    }
    public void setUserinfo(Userinfo userinfo) {
    this.userinfo = userinfo;
    }
    public int getMsgId() {
    return msgId;
    }
    public void setMsgId(int msgId) {
    this.msgId = msgId;
    }
    public String getMsgSubject() {
    return msgSubject;
    }
    public void setMsgSubject(String msgSubject) {
    this.msgSubject = msgSubject;
    }
    public java.sql.Date getMsgTime() {
    return msgTime;
    }
    public void setMsgTime(java.sql.Date msgTime) {
    this.msgTime = msgTime;
    }
    public String getMsgContent() {
    return msgContent;
    }
    public void setMsgContent(String msgContent) {
    this.msgContent = msgContent;
    }
    public int getUserId() {
    return userId;
    }
    public void setUserId(int userId) {
    this.userId = userId;
    }
    Messag.hbm.xml代码如下
    <?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">
    <!-- 
        Mapping file autogenerated by MyEclipse Persistence Tools
    -->
    <hibernate-mapping>
        <class name="com.tvlink.bean.Message" table="message" catalog="test">
            <id name="msgId" type="java.lang.Integer">
                <column name="msg_Id" />
                <generator class="identity" />
            </id>      
            <property name="msgSubject" type="java.lang.String">
                <column name="msg_Subject" length="200" />
            </property>
            
             <property name="msgTime" type="date">
                <column name="msg_Time" />
            </property>
            
            <property name="msgContent" type="java.lang.String">
                <column name="msg_Content" length="200" />
            </property>
           <!-- 
            <property name="userId" type="java.lang.Integer">
                <column name="user_Id"  />
            </property>
             -->
             
            <many-to-one name="userinfo" class="com.tvlink.bean.Userinfo" column="user_Id"   
            unique="true" >
            </many-to-one>
        </class>
    </hibernate-mapping>userinfo表和message表通过user_id关联的。帮我看看
      

  4.   


    你是要在插入message的时候也插入user?