【问题标题】:Spring-Hibernate insertion Error with Column 'unit_id' cannot be null Exception列'unit_id'的Spring-Hibernate插入错误不能为空异常
【发布时间】:2023-03-30 01:03:01
【问题描述】:

我正在用 java 开发一个小型 Spring 和 hibernate 基础应用程序,我的应用程序与 Employee 和 Unit 具有 一对多的关系,Employee 有一个 unit,Unit 有多个 Employee。 在这个小应用程序中会产生这样的错误 `

我将数据硬编码到单元模式表中,我填充了 jsp 填充的单元组合框,但 @controller 单元内部有一个空数据。

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 列“unit_id”不能为空

如果允许对未插入 unit_id 的其他数据插入 unit_id 为空值

这里是我的实体类

@Entity
@Table(name = "employee")
public class Employee implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)

    @Column(name = "id")
    private Integer id;

    @Column(name = "epf")
    private int epf;

    @Column(name = "fname")
    private String fname;

    @Column(name = "lname")
    private String lname;

    @Column(name = "email")
    private String email;

    @JoinColumn(name = "unit_id", referencedColumnName = "id")
    @ManyToOne//(optional = false)
    private Unit unit;


@Entity
@Table(name = "unit")
public class Unit implements Serializable {
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;

    @Column(name = "name")

我的控制器类

 @Autowired
        private EmployeeService employeeService;
        private DesignationService designationService;

        @RequestMapping({"/index", "/"})
        public String setupForm(Map<String, Object> map){
            Employee student = new Employee();
            map.put("employee", student);
            map.put("employeeList", employeeService.getAllEmployee());
map.put("unitList", employeeService.getAllUnitList());

            return "employee";
        }

@RequestMapping(value="/employee.do", method=RequestMethod.POST)
    public ModelAndView doActions(@ModelAttribute Employee emp, BindingResult result, @RequestParam String action, Map<String, Object> map){
        ModelAndView modelAndView = new ModelAndView("employee");

        Employee employeetResult = new Employee();
        switch(action.toLowerCase()){   //only in Java7 can put String in switch
        case "add":
            employeeService.addEmployee(emp);
            employeetResult = emp;
            break;
        case "edit":
            employeeService.updateEmployee(emp);
            employeetResult = emp;
            break;
        case "delete":
            employeeService.deleteEmployee(emp.getId());
            employeetResult = new Employee();
            break;
        case "search":
            Employee searchedStudent = employeeService.getEmployee(emp.getId());
            employeetResult = searchedStudent!=null ? searchedStudent : new Employee();
            break;
        }
        map.put("employee", employeetResult);
        map.put("employeeList", employeeService.getAllEmployee());
        return modelAndView;
    }

我的 JSP

<form:form action="employee.do" method="POST" commandName="employee">
  <table width="341" border="0">
    <tr>
      <td width="154">&nbsp;</td>
      <td width="21">&nbsp;</td>
      <td width="152">&nbsp;</td>
    </tr>
    <tr>
      <td><spring:message code="employee.id"/></td>
      <td>&nbsp;</td>
      <td><form:input path="epf" /></td>
    </tr>
    <tr>
      <td><spring:message code="employee.epf"/></td>
      <td>&nbsp;</td>
      <td><form:input path="epf" /></td>
    </tr>
    <tr>
      <td><spring:message code="employee.fname"/></td>
      <td>&nbsp;</td>
      <td><form:input path="fname"/></td>
    </tr>
    <tr>
      <td><spring:message code="employee.lname"/></td>
      <td>&nbsp;</td>
      <td><form:input path="lname" /></td>
    </tr>

    <tr>
      <td><spring:message code="employee.email"/></td>
      <td>&nbsp;</td>
      <td><form:input path="email" /></td>
    </tr>

    <tr>
      <td><spring:message code="employee.unit"/></td>
      <td>&nbsp;</td>

<!-- Unit Combo filling --><td>
     <form:select path="unit" multiple="false" size="1">
        <form:options items="${unitList}" itemValue="id" itemLabel="name"/>
     </form:select>
<!-- Unit Combo filling end --></td>
    </tr>
    <tr>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
      <td>&nbsp;</td>
    </tr>
    <tr>
    <td colspan="2">
      <input type="submit" name="action" value="Add" />
      <input type="submit" name="action" value="Edit" />
      <input type="submit" name="action" value="Delete" />
      <input type="submit" name="action" value="Search" />
    </td>
    </tr>
  </table>
</form:form>

我的 DAO 课程

> @Repository public class EmployeeDaoImp implements EmployeeDao {
> 
>   @Autowired  private SessionFactory sessionfactory;
>           public void addEmployee(Employee emp) {         sessionfactory.getCurrentSession().save(emp);
> 
>   }
> 
>       public void updateEmployee(Employee emp) {
>       sessionfactory.getCurrentSession().update(emp);
> 
>   }
> 
>       public void deleteEmployee(int id) {
>               sessionfactory.getCurrentSession().delete(getEmployee(id));     }
> 
>    Employee   public Employee getEmployee(int empId) {
>               return (Employee) sessionfactory.getCurrentSession().get(Employee.class,empId);     }
> 
>       public List getAllEmployee() {
>               return sessionfactory.getCurrentSession().createQuery("from Employee").list();  }

【问题讨论】:

  • Employee的相关Unit对象是否保存了一个?
  • 是的,先生,这是模式表的硬编码数据,我填充了填充 jsp 其作品的单元组合框,但在 @controller 单元内部有一个空数据..
  • 我看不到您在 setupForm 方法中将 Unit 对象设置为 Employee 对象。如果未将 Unit 对象设置为新员工对象,则 Unit_Id 具有空值。因此,在保存之前将 Unit 对象设置为 Employee 对象
  • 能否请您发布确切有异常的代码,并将代码从控制器发布到 dao 仅用于调用层次结构。

标签: spring hibernate jsp jakarta-ee jpa


【解决方案1】:

id 是数据库中的主键。您正在保存一个对象而不赋予它的价值。所以要么让它在表中自动递增,要么使用休眠生成它的值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 2022-01-17
    • 2012-08-18
    • 2016-06-19
    • 2014-10-08
    • 1970-01-01
    相关资源
    最近更新 更多