2017-12-30 26 views
0

私はParkingspace経由で従業員を更新したいが、成功しない。なぜ駐車スペースで従業員を更新できないのですか?JPA 1対1の更新操作

従業員クラス

@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

関連する問題