【发布时间】:2015-04-25 11:27:54
【问题描述】:
我有 USER(id) 和 CONTACT(user_id, first, last) 表。 CONTACT.user_id 是 USER 表的外键。
在 User.java 中:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Integer id;
@OneToOne(cascade = CascadeType.ALL)
@PrimaryKeyJoinColumn
private Contact contact;
在 Contact.java 中
@Id
@Column(name="USER_ID")
private Integer userId;
@MapsId
@OneToOne(mappedBy = "contact")
@JoinColumn(name = "USER_ID")
private User user;
我使用 userRepository.saveAndFlush(user) 来保存 USER 对象。由于我在 CONTACT 中使用 USER.ID 作为外键,所以我需要在 CONTACT 之前插入 USER,但 JPA 是先插入 CONTACT,它会将 CONTACT 视为 USER 的成员。所以我在插入 CONTACT 时收到 USER_ID can not be NULL 错误。我应该怎么做才能解决这个插入顺序?还是我应该完全通过共享主键来避免使用 OneToOne 映射?
谢谢!
【问题讨论】:
标签: mysql hibernate jpa eclipselink spring-data-jpa