2017-10-20 50 views
0

J'ai besoin de mettre à jour les colonnes de remorquage à l'intérieur de ma table (Job cette table est jointe avec deux autres tables employees et l'historique des jobs) l'une d'entre elles est la clé primaire Aidez-moi!Mise à jour de la clé primaire spring spring jpa

package com.touati.org.model; 
import java.io.Serializable; 
import javax.persistence.*; 
import java.math.BigDecimal; 
import java.util.List; 


/** 
* The persistent class for the jobs database table. 
* 
*/ 
@Entity 
@Table(name="jobs") 
@NamedQuery(name="Job.findAll", query="SELECT j FROM Job j") 
public class Job implements Serializable { 
    private static final long serialVersionUID = 1L; 

    @Id 
    @Column(name="JOB_ID") 
    private String jobId; 

    @Column(name="JOB_TITLE") 
    private String jobTitle; 

    @Column(name="MAX_SALARY") 
    private BigDecimal maxSalary; 

    @Column(name="MIN_SALARY") 
    private BigDecimal minSalary; 

    //bi-directional many-to-one association to Employee 
    @OneToMany(mappedBy="job") 
    private List<Employee> employees; 

    //bi-directional many-to-one association to JobHistory 
    @OneToMany(mappedBy="job") 
    private List<JobHistory> jobHistories; 

    public Job() { 
    } 

    public String getJobId() { 
     return this.jobId; 
    } 

    public void setJobId(String jobId) { 
     this.jobId = jobId; 
    } 

    public String getJobTitle() { 
     return this.jobTitle; 
    } 

    public void setJobTitle(String jobTitle) { 
     this.jobTitle = jobTitle; 
    } 

    public BigDecimal getMaxSalary() { 
     return this.maxSalary; 
    } 

    public void setMaxSalary(BigDecimal maxSalary) { 
     this.maxSalary = maxSalary; 
    } 

    public BigDecimal getMinSalary() { 
     return this.minSalary; 
    } 

    public void setMinSalary(BigDecimal minSalary) { 
     this.minSalary = minSalary; 
    } 

    public List<Employee> getEmployees() { 
     return this.employees; 
    } 

    public void setEmployees(List<Employee> employees) { 
     this.employees = employees; 
    } 

    public Employee addEmployee(Employee employee) { 
     getEmployees().add(employee); 
     employee.setJob(this); 

     return employee; 
    } 

    public Employee removeEmployee(Employee employee) { 
     getEmployees().remove(employee); 
     employee.setJob(null); 

     return employee; 
    } 

    public List<JobHistory> getJobHistories() { 
     return this.jobHistories; 
    } 

    public void setJobHistories(List<JobHistory> jobHistories) { 
     this.jobHistories = jobHistories; 
    } 

    public JobHistory addJobHistory(JobHistory jobHistory) { 
     getJobHistories().add(jobHistory); 
     jobHistory.setJob(this); 

     return jobHistory; 
    } 

    public JobHistory removeJobHistory(JobHistory jobHistory) { 
     getJobHistories().remove(jobHistory); 
     jobHistory.setJob(null); 

     return jobHistory; 
    } 

} 

mon contrôleur: ici lorsque je tente de chercher tous les emplois dans la base de données, il fonctionne très bien, même si je tente de mettre à jour juste le titre du travail, il fonctionne très bien pour, mais dans le cas où je tente de définir une nouvelle clé primaire pour la table de travail il me donne l'erreur ici mon contrôleur.

package com.touati.org.model; 

import java.io.IOException; 

import org.springframework.beans.factory.annotation.Autowired; 
import org.springframework.stereotype.Controller; 
import org.springframework.ui.Model; 
import org.springframework.web.bind.annotation.GetMapping; 
import org.springframework.web.bind.annotation.PathVariable; 
import org.springframework.web.bind.annotation.RequestMapping; 
import org.springframework.web.bind.annotation.RequestMethod; 
import org.springframework.web.bind.annotation.ResponseBody; 
import org.springframework.web.bind.annotation.ResponseStatus; 







@Controller // This means that this class is a Controller 
@RequestMapping(path="/project") // This means URL's start with /demo (after Application path) 
public class MainController { 



    @GetMapping(path="/job") 
    public @ResponseBody Iterable<Job> getAllJob() { 
     // This returns a JSON or XML with the users 
     return jobRepository.findAll(); 
    } 




    @GetMapping(path="/job/{jobId}") 
    public @ResponseBody String getJob(@PathVariable String jobId) { 
     Job job = jobRepository.findOne(jobId); 

     try { 
     job.setJobTitle("manager"); 
     job.setJobId("test1"); 
     jobRepository.save(job); 
     } 
     catch (Exception ex) { 
      return "Error updating the job: " + ex.toString(); 
     } 
     return "Job succesfully updated!"; 



    } 

i eu cette erreur,

Error updating the user: org.springframework.orm.jpa.JpaSystemException: identifier of an instance of com.touati.org.model.Job was altered from test to test1; nested exception is org.hibernate.HibernateException: identifier of an instance of com.touati.org.model.Job was altered from test to test1 

Merci pour votre aide.

Répondre