如何将一对一休眠实体映射到一对多数据库结构?
How can I map a one-to-one hibernate entity with a one-to-many database structure?
我正在尝试做一个一对一的双向休眠实体。当我保存父对象时,它没有填充子对象上的 customer_id。我不知道为什么。我希望有某种方法可以通过休眠注释告诉它执行此操作。
我的实体看起来像
@Table(name = "customer")
public class CustomerEntity {
@Id
@Column(name = "id")
private Long id;
@OneToOne(mappedBy = "customer", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private CustomerAddressEntity customerAddress;
..more
}
和
@Table(name="customer_address")
@GenericGenerator(name="generator", strategy="increment")
public class CustomerAddressEntity {
@Id
@Column(name = "id")
@GenericGenerator(name = "sequence_customer_address_id", strategy = "com.abc.enrollment.service.IdGenerator")
@GeneratedValue(generator = "sequence_customer_address_id")
private Long id;
@OneToOne
@JoinColumn(name = "customer_id", referencedColumnName = "id")
private CustomerEntity customer;
..more
}
表格看起来像
CREATE TABLE enroll.customer_address(
id NUMBER(38,0) NOT NULL,
customer_id NUMBER(38,0) )
CREATE TABLE enroll.customer (
id NUMBER(38,0) NOT NULL)
hibernateVersion = "5.0.0.CR2"
除了已接受的答案外,我还必须做一些其他事情才能让它发挥作用。我将 post 放在这里以防它对其他人有帮助。我们使用 lombok 并且正在对对象进行 JSON 序列化。以下注释避免了堆栈溢出错误。
@ToString(exclude = "customer")
@EqualsAndHashCode(exclude = "customer")
public class CustomerAddressEntity {
和
@JsonIgnore
private CustomerEntity customer;
既然是双向关系,就应该在两端都设置。意思是,在parent中设置对子对象的引用,在child中设置对父对象的引用。它应该工作。
像这样
Customer cust = new Customer();
CustomerAddress custAddr = new CustomerAddress();
cust.setCustomerAddress( custAddr );
custAddr.setCustomer( cust );
我正在尝试做一个一对一的双向休眠实体。当我保存父对象时,它没有填充子对象上的 customer_id。我不知道为什么。我希望有某种方法可以通过休眠注释告诉它执行此操作。
我的实体看起来像
@Table(name = "customer")
public class CustomerEntity {
@Id
@Column(name = "id")
private Long id;
@OneToOne(mappedBy = "customer", fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private CustomerAddressEntity customerAddress;
..more
}
和
@Table(name="customer_address")
@GenericGenerator(name="generator", strategy="increment")
public class CustomerAddressEntity {
@Id
@Column(name = "id")
@GenericGenerator(name = "sequence_customer_address_id", strategy = "com.abc.enrollment.service.IdGenerator")
@GeneratedValue(generator = "sequence_customer_address_id")
private Long id;
@OneToOne
@JoinColumn(name = "customer_id", referencedColumnName = "id")
private CustomerEntity customer;
..more
}
表格看起来像
CREATE TABLE enroll.customer_address(
id NUMBER(38,0) NOT NULL,
customer_id NUMBER(38,0) )
CREATE TABLE enroll.customer (
id NUMBER(38,0) NOT NULL)
hibernateVersion = "5.0.0.CR2"
除了已接受的答案外,我还必须做一些其他事情才能让它发挥作用。我将 post 放在这里以防它对其他人有帮助。我们使用 lombok 并且正在对对象进行 JSON 序列化。以下注释避免了堆栈溢出错误。
@ToString(exclude = "customer")
@EqualsAndHashCode(exclude = "customer")
public class CustomerAddressEntity {
和
@JsonIgnore
private CustomerEntity customer;
既然是双向关系,就应该在两端都设置。意思是,在parent中设置对子对象的引用,在child中设置对父对象的引用。它应该工作。 像这样
Customer cust = new Customer();
CustomerAddress custAddr = new CustomerAddress();
cust.setCustomerAddress( custAddr );
custAddr.setCustomer( cust );