JPA一对一更新操作

问题描述 投票:0回答:1

我想通过Parkingspace更新员工,但我没有成功。为什么我不能通过停车位更新员工?

员工类

@Entity
public class Employee {
@Id
@GeneratedValue(strategy=GenerationType.TABLE)
private int id;
private String name;
private String surname;
private int salary;

@OneToOne(fetch = FetchType.LAZY)
@JoinColumn(name="park_id", unique=true)
private ParkingSpace parkingSpace;
 ...getter/setter

   }

停车场班

@Entity
public class ParkingSpace {
@Id
@GeneratedValue(strategy = GenerationType.TABLE)
private int id;
private int parkingLot;
private String location;
@OneToOne(mappedBy = "parkingSpace",cascade = CascadeType.ALL, 
        fetch = FetchType.LAZY, optional = false)
private Employee employee;
....getter/setter
}

我想通过Parkingspace更新员工,但我没有成功。数据库没有变化。

...........
entityTransaction.begin();
parkingSpace.setEmployee(employee);
entityTransaction.commit();
.....
hibernate
1个回答
0
投票

您必须在提交之前指定Session.saveOrUpdate()。 此外,在这里你似乎改变了employee关系:

parkingSpace.setEmployee(employee);

请注意,ParkingSpace实体不是Employee与其自身之间关系的所有者,因为employee字段在mappedBy注释中指定OneToOne

@OneToOne(mappedBy = "parkingSpace",cascade = CascadeType.ALL, 
        fetch = FetchType.LAZY, optional = false)
private Employee employee;

因此调用parkingSpace.setEmployee(employee);将毫无用处。 Employee实体是所有者,您应指定:

employee.setParkingSpace(parkingSpace);
© www.soinside.com 2019 - 2024. All rights reserved.