2017-09-27 10 views
0

従業員エンティティのHibernateのマッピング - 外部キー列がnullにすることはできません - 春JSP

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(); 
    } 
} 

のAppコントローラ

@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(ネイティブメソッド)nullにすることはできません sun.reflect.NativeConstructorAccessorImpl.newInstance(不明なソース) sun.reflect.DelegatingConstructorAccessorImpl.newInstance(不明なソース) java.lang.reflect.Constructor.newInstance(不明なソース) com.mysql.jdbc.Util.handleNewInstance(Utilの.java:408)

+0

フォームを送信すると、入札した血液型オブジェクトが表示されません。あなたのサービス内の従業員の血統を手動で設定する必要があります。このようなものは、 'employee.setBloodGroup(bloodDao.findOne(employee.bid)); dao.save(employee); ' – JSingh

+0

employee.setBloodGroup(bloodDao.findOne(employee.bid)); 「入札」タイプはEmployee EntityのBloodGroupです。 findOne(employee.bid)で私を助けてください。 – shami

答えて

0

あなたは明示的に言った:@ManyToOne(optional=false)意味それはnullにすることはできません

関連する問題