データベースを追加および更新するHRシステムがあります。永続化とマージのJPA関係に問題があります。これは、null値を渡すたびに発生します。 org.hibernate:によって引き起こさ :[トランザクションのコミット中にエラーRollbackException]:私たちの要求ではNULL可能することができますが、でも、私は次のようなエラーが発生した部署例えばそれにnull値を入力するときJPA OneToOne永続性にnullを渡す
。 TransientObjectException:オブジェクト保存されていない一時的なインスタンスを参照する - フラッシュする前に一時的なインスタンス を保存: - ここに参考> models.db.Department
私のエンティティクラスです Employee.class
models.db.Employee.Departmentを@Entity
@Table(name="EMPLOYEES")
public class Employee {
@Id
public Integer EMPLOYEE_ID;
public String FIRST_NAME;
public String LAST_NAME;
@OneToOne
@JoinColumn(name= "JOB_ID")
public Job Job;
@OneToOne
@JoinColumn(name="MANAGER_ID")
public Employee Manager;
@OneToOne
@JoinColumn(name= "DEPARTMENT_ID")
public Department Department;
}
Job.class
@Entity
@Table(name="JOBS")
public class Job {
@Id
public String JOB_ID;
public String JOB_TITLE;
}
Department.class
@Entity
@Table(name="DEPARTMENTS")
public class Department {
@Id
public Integer DEPARTMENT_ID;
public String DEPARTMENT_NAME;
@OneToOne(cascade = {CascadeType.ALL})
@JoinColumn(name="MANAGER_ID")
public Employee Manager;
}
AppModel.classは(保存)
public void save() {
int intSize = listSize + 1;
for (int i= 0; i < intSize; i++) {
Employee employee = new Employee();
Job job = new Job();
job.JOB_ID = employees.get("empJobId" + i);
Department dept = new Department();
dept.DEPARTMENT_ID = ParseUtil.stringToInt(employees.get("empDeptId" + i));
Employee manager = new Employee();
manager.EMPLOYEE_ID = ParseUtil.stringToInt(employees.get("empMgrId" + i));
Integer intId = ParseUtil.stringToInt(employees.get("empId" + i));
employee.EMPLOYEE_ID = intId;
employee.FIRST_NAME = employees.get("empFirstName" + i);
employee.LAST_NAME = employees.get("empLastName" + i);
employee.Job = job;
employee.Department = dept;
employee.Manager = manager;
EmpDomain.updateEmp(employee);
}
}
とEmpDomain.updateEmp()
public static void updateEmp(Employee employee) {
JPA.em().merge(employee);
}
私は初心者のプレイ2の初心者ですので、例外エラーを修正する方法はわかりません。
私は実際にどのようにjpa関係が働くかを知りません。どのような単方向性または双対性。私の目標は、このOracle SQLコードをJPA Mergeに変換することです。 'EMPLOYEES' ' SET' 'UPDATE'' FIRST_NAME =、 '' LAST_NAME =、 '' JOB_ID =、 '' MANAGER_ID =、 '' DEPARTMENT_ID =、 '' WHERE' 'EMPLOYEE_ID =?;' しかし、JPAリレーションシップの仕事は本当にありません。マッピングやその他のもので。私は何とかそれを更新するために持っていますが、私は部署やマネージャーやジョブに値を入れないと、ロールバック例外が発生します。 – NoobProgrammer
指定されたemplyeeにカスケードオプションを追加しようとしました。 –