我想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