2017-09-27 5 views
0

employé EntitéMapping - colonne de clé étrangère ne peut pas être null - Spring 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; 
    } 
} 

Groupe sanguin Entité

@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 Controller

@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"; 
} 

page 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> 

état HTTP 500 - traitement de la requête n'a pas; exception imbriquée est org.hibernate.exception.ConstraintViolationException: Impossible d'exécuter déclaration com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: colonne 'offre' ne peut pas être nulle sun.reflect.NativeConstructorAccessorImpl.newInstance0 (Native Method) sun.reflect.NativeConstructorAccessorImpl.newInstance (Source inconnue) de sun.reflect.DelegatingConstructorAccessorImpl.newInstance (Source inconnue) java.lang.reflect.Constructor.newInstance (Source inconnue) com.mysql.jdbc.Util.handleNewInstance (Util .java: 408)

+0

Lorsque vous soumettez le formulaire, vous ne recevez pas d'objet groupe sanguin à la place, vous avez enchéri. Vous devez définir manuellement le groupe sanguin d'employés dans votre service, comme ceci: 'employee.setBloodGroup (bloodDao.findOne (employee.bid)); dao.save (employé); ' – JSingh

+0

employee.setBloodGroup (bloodDao.findOne (employee.bid)); Le type "enchère" est BloodGroup dans l'entité Employee. S'il vous plaît aidez-moi dans findOne (employee.bid); – shami

Répondre

0

Eh bien, vous avez dit explicitement: @ManyToOne(optional=false) ce qui signifie il ne peut pas être nul.