我想User.id
和Address.user_id
列JPA:OneToOne關係所有者
創建兩個表一比一的關係:
@Entity()
@Table(name = "user")
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "id", referencedColumnName = "user_id")
private Address address;
public int getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
@Entity
@Table(name = "address")
public class Address extends com.mezoline.domain.common.Entity {
@Id
@GeneratedValue
private int id;
@OneToOne(mappedBy = "address")
private User user;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public User getUser() {
return user;
}
public void setUser(User user) {
this.user = user;
}
}
在這裏,我已經可以看到問題:hibernate沒有生成數據庫列Address.user_id
我的預期如何。
創建Address
實例,並添加到User
:
User user = entityManager.find(User.class, 69);
Address address = new Address();
address.setCity("Тест");
userTransaction.begin();
user.setAddress(address);
entityManager.merge(user);
userTransaction.commit();
我打電話merge(user)
後。數據成功保存...沒有任何關係信息。
UPD:
下面的配置,JPA將創建關係列Address.user_id(只是老闆的關係被交換)
public class User {
...
@OneToOne(cascade = CascadeType.ALL, mappedBy = "user")
private Address address;
...
}
public class Address {
....
@OneToOne()
@JoinColumn(name = "user_id")
private User user;
....
}
但後保存Address.user_id爲空...(其它列正在填充)
UPD2:
謝謝。其次配置做工精細,當設置反方關係領域(如評論建議):
Address address = createAddress();
address.setUser(user);
user.setAddress(address);
但我不`噸明白,爲什麼第一個配置(用戶是擁有方)唐不工作。
嗯..謝謝。我認爲JPA管理自己..(AOP) – Hett