【问题标题】:Hibernate Mapping - Foreign Key Column cannot be null - Spring JSP休眠映射-外键列不能为空-Spring JSP
【发布时间】:2018-03-09 10:13:41
【问题描述】:

员工实体

import java.util.List;

@Entity
@Table(name = "EMPLOYEE")
public class Employee {
    @Id
    @Column(name = "wid")
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer wid;

    @ManyToOne(optional = false)
    @JoinColumn(name = "bid")
    private BloodGroup bloodgroup;

    public Employee() {
    }

    public Integer getWid() {
        return this.wid;
    }

    public void setWid(Integer wid) {
        this.wid = wid;
    }

    public BloodGroup getBloodgroup() {
        return bloodgroup;
    }

    public void setBloodgroup(BloodGroup bloodgroup) {
        this.bloodgroup = bloodgroup;
    }
}

血族实体

@Entity
@Table(name="BLOODGROUP")
public class BloodGroup {
    @Id
    @Column(name = "bid")
    @GeneratedValue (strategy= GenerationType.AUTO)
    private Integer bid;

    @Size(min=1,max = 30)
    @Column(name = "blood_name")
    private String blood_name;

    @OneToMany(mappedBy = "bloodgroup",fetch=FetchType.LAZY,
            targetEntity=Employee.class, cascade=CascadeType.PERSIST)
    private List<Employee> emp;
    public BloodGroup() {

    }
    public Integer getBid() {
        return bid;
    }
    public void setBid(Integer bid) {
        this.bid = bid;
    }
    public String getBlood_name() {
        return blood_name;
    }
    public void setBlood_name(String blood_name) {
        this.blood_name = blood_name;
    }
    public List<Employee> getEmp() {
        return emp;
    }
    public void setEmp(List<Employee> emp) {
        this.emp = emp;
    }
}

EmployeeDaoImpl

import com.springmvc.model.BloodGroup;
import com.springmvc.model.Employee;

@Repository("employeeDao")
public class EmployeeDaoImpl extends AbstractDao<Integer, Employee>
        implements EmployeeDao {
    @Override
    public void save(Employee employee) {
        persist(employee);
    }

    @Override
    public List<Employee> allEmployee() {
        Criteria criteria = createEntityCriteria();
        return (List<Employee>) criteria.list();
    }
}

EmployeeServiceImpl

import com.springmvc.service.employeeService;

@Service("EmployeeService")
@Transactional
public class employeeServiceImpl implements employeeService {
    @Autowired
    private EmployeeDao dao;

    @Override

    public void save(Employee employee) {
        dao.save(employee);
    }

    @Override
    public List<Employee> allEmployee() {

        return dao.allEmployee();
    }
}

应用控制器

@RequestMapping(value = {"/new-emp"}, method = RequestMethod.GET)
public String newEmp(ModelMap model) {
    Employee employee = new Employee();
    model.addAttribute("employee", employee);

    ///////// Blood Group List
    List<BloodGroup> bloodgroup = bloodService.allBloodGroup();
    model.addAttribute("bloodgroupList", bloodgroup);
    return "addEmp";
}

// Call on Submission of 'Save or Update' Button Add Employee
@RequestMapping(value = {"/new-emp"}, method = RequestMethod.POST)
public String addEmp(@Valid Employee employee, BindingResult result,
                     ModelMap model,
                     final RedirectAttributes redirectAttributes, HttpServletRequest
                             request, HttpServletResponse response) {
    wService.save(employee);

    return "addEmp";
}

JSP 页面

<form:form method="POST" modelAttribute="employee">
    <form:input type="hidden" path="wid" id="wid"/>

    <label for="bloodgroup">Blood Group:</label>
    <form:select path="bloodgroup" items="${blood}"
                 itemValue="bid" itemLabel="blood_name" name="blood1"/>

    <c:choose>
        <c:when test="${edit}">
            <input type="submit" value="Update"/>
        </c:when>

        <c:otherwise>
            <input type="submit" value="Save"/>
        </c:otherwise>
    </c:choose>

</form:form>

HTTP 状态 500 - 请求处理失败;嵌套异常是 org.hibernate.exception.ConstraintViolationException:无法执行 陈述 com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: 列“出价”不能为空 sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法) sun.reflect.NativeConstructorAccessorImpl.newInstance(未知来源) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(未知来源) java.lang.reflect.Constructor.newInstance(未知来源) com.mysql.jdbc.Util.handleNewInstance(Util.java:408)

【问题讨论】:

  • 当您提交表单时,您没有得到血型对象,而是您有出价。您必须在服务中手动设置员工的血型,例如 employee.setBloodGroup(bloodDao.findOne(employee.bid)); dao.save(employee);

标签: java spring hibernate null hibernate-mapping


【解决方案1】:

你确实明确说过:@ManyToOne(optional=false) 的意思是它不能为空

【讨论】:

    猜你喜欢
    • 2011-07-26
    • 2018-06-12
    • 1970-01-01
    • 2020-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多