gpt4 book ai didi

java - 更新 Spring Boot 实体管理器 jpa 的主键

转载 作者:行者123 更新时间:2023-11-29 10:33:57 25 4
gpt4 key购买 nike

我需要更新表中的两列(作业此表与其他两个表员工和工作历史记录相连)其中一个是主键,但如果有人可以提供帮助,我会收到错误。

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

}

我的 Controller :在这里,当我尝试在数据库中查找所有作业时,它工作正常,而且如果我尝试仅更新作业的标题,它也可以正常工作,但如果我尝试设置新的主要工作作业表的键它给我错误在这里我的 Controller 。

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!";



}

}

我收到此错误,

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

感谢您的帮助。

最佳答案

主键不应更改。如果您需要更改主键,则意味着您的设计很糟糕。如果您需要经常更改 JOB_ID,请为主键创建另一列,例如 ID。另一种可能性是复制所有属性并使用新的 JOB_ID 创建新记录,然后删除旧的记录。

关于java - 更新 Spring Boot 实体管理器 jpa 的主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46856941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com