2017-12-30 23 views
0

Parkingspace를 통해 직원을 업데이트하고 싶지만 성공하지 못합니다. 왜 주차 공간을 통해 직원을 업데이트 할 수 없습니까?JPA 일대일 업데이트 작업

직원 클래스

@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 

    } 

Parkingspace 클래스

@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를 통해 직원을 업데이트 할,하지만 난하지 succeed.There 데이터베이스에 변화하지 않습니다.

........... 
entityTransaction.begin(); 
parkingSpace.setEmployee(employee); 
entityTransaction.commit(); 
..... 

답변

0

커밋 전에 Session.saveOrUpdate()을 지정해야합니다.

다음 OneToOne 주석에 mappedBy을 지정하는 ParkingSpace 기업이 직원의 필드로 Employee 자체 사이의 관계의 소유자가 아닌 것을

parkingSpace.setEmployee(employee); 

참고 :
게다가, 여기 당신은 employee 관계를 변경하는 것

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

따라서 parkingSpace.setEmployee(employee);을 호출하면 쓸모가 없습니다.
소유자 인 Employee 엔티티, 당신은 지정해야합니다 : 직원에 변화가 없습니다

employee.setParkingSpace(parkingSpace); 
+0

. 나는 이해할 수 없었다. 양측이 접근하고 변경할 권리가 없는가? – omerstack

+0

아 좋아요. 아닙니다. 양측 모두 변화를 반영 할 권리가 없습니다. 소유자 측에서만 가능합니다. 나는 나의 대답을 업데이트했다. – davidxxx