抛出的错误:
3!!!!!@@@247
asdfa  dsafafdsaddfafdsasdfasdfsa
陈真  软件设计大赛
could not insert: [scnupm.domain.Project]; SQL [insert into Project (name, description, status, activityID, captainID) values (?, ?, ?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [scnupm.domain.Project]
at org.springframework.orm.hibernate3.SessionFactoryUtils.convertHibernateAccessException(SessionFactoryUtils.java:637)
at org.springframework.orm.hibernate3.HibernateAccessor.convertHibernateAccessException(HibernateAccessor.java:412)
at org.springframework.orm.hibernate3.HibernateTemplate.doExecute(HibernateTemplate.java:411)
at org.springframework.orm.hibernate3.HibernateTemplate.executeWithNativeSession(HibernateTemplate.java:374)
at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java:683)
at scnupm.dao.impl.ProjectDaoImpl.save(ProjectDaoImpl.java:36)
at scnupm.service.impl.ProjectServiceImpl.createProject(ProjectServiceImpl.java:48)
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.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy7.createProject(Unknown Source)
at scnupm.action.project.ProjectSave.execute(ProjectSave.java:61)
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 com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
at com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
at scnupm.action.authority.AuthorityInterceptor.intercept(AuthorityInterceptor.java:22)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
at com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
at com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
at com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
《----------------------------------------------》
代码:
action层:
@Override
public String execute() throws Exception {
try{
ActionContext ctx = ActionContext.getContext();
Integer userId = (Integer) ctx.getSession().get(Session.USER_ID);
System.out.println(activityId+"!!!!!@@@"+userId);
if (id != null) {
project.setId(id);
if (projectService.getProjectDetail(id).getCaptain().getId() == userId)
projectService.updateProject(project);
} else {
System.out.println(project.getName()+"  "+project.getDescription());
projectService.createProject(project, userId, activityId);
id = project.getId();
}
}catch(Exception e){
e.printStackTrace();
}
return SUCCESS;
}
service层:
@Override
public void createProject(Project project, Integer userId, Integer actId) {
Person person = personDao.findById(userId);
Activity activity = activityDao.findById(actId);
project.setCaptain(person);
project.setActivity(activity);
project.setStatus(0);
System.out.println(person.getName()+"  "+activity.getName());
project.getStudents().add(person);
projectDao.save(project);
project.getId();
activity.getProjects().add(project);
}
数据库映射文件:
<hibernate-mapping>
 <class name="scnupm.domain.Project" table="Project">
  <id name="id" type="java.lang.Integer">
   <column name="id"/>
   <generator class="identity"/>
  </id>
  <property generated="never" lazy="false" name="name" type="java.lang.String">
   <column name="name" not-null="true"/>
  </property>
  <property generated="never" lazy="false" name="description" type="java.lang.String">
   <column length="1024" name="description" not-null="true"/>
  </property>
  <property generated="never" lazy="false" name="status" type="java.lang.Integer">
   <column name="status" not-null="true"/>
  </property>
  <many-to-one class="scnupm.domain.Activity"
   column="activityID" name="activity" not-null="true"/>
  <many-to-one class="scnupm.domain.Person"
   column="captainID" lazy="false" name="captain" not-null="true" unique="true"/>
  <set inverse="true" name="files" sort="unsorted">
   <key>
    <column name="projectID" not-null="true"/>
   </key>
   <one-to-many class="scnupm.domain.File"/>
  </set>
  <set inverse="true" name="comments" sort="unsorted">
   <key>
    <column name="projectID" not-null="true"/>
   </key>
   <one-to-many class="scnupm.domain.Comment"/>
  </set>
  <set inverse="true" name="guides" sort="unsorted">
   <key>
    <column name="projectID" not-null="true"/>
   </key>
   <one-to-many class="scnupm.domain.Guide"/>
  </set>
  <set name="students" sort="unsorted" table="Project_Student">
   <key>
    <column name="projectID" not-null="true"/>
   </key>
   <many-to-many class="scnupm.domain.Person"
    column="personID" unique="false"/>
  </set>
 </class>
</hibernate-mapping>

解决方案 »

  1.   

    SQL [insert into Project (name, description, status, activityID, captainID) values (?, ?, ?, ?, ?)]; constraint [null]; nested exception is org.hibernate.exception.ConstraintViolationException: could not insert: [scnupm.domain.Project]应该是违反了“非空”约束,检查下每个字段的值吧。
      

  2.   

    可是project表的name, description, status, activityID, captainID这几个值我输出到控制台时是有值的阿?
      

  3.   

    在 projectDao.save(project); 之前,你检查过所有字段了?
      

  4.   


    没看到你检查:
      Activity activity = activityDao.findById(actId);
    activity是否存在。