我有一个旧数据库,其中有两个表之间存在隐式关联:
booking
- id
- name
... some other fields...
和
booking_info
- id
- booking_id
... some other fields...
由于当前的数据库设计,这两个表之间没有任何约束,这意味着可能存在一个预订条目而没有任何 booking_info 条目,反之亦然。booking_id
in booking_info
table 是引用booking
表(列id
)的隐式外键,但它也可能引用缺席预订。
我为这些表创建了以下 JPA 映射:
@Entity
public class Booking {
@Id
private Long id;
private String name;
// getters & setters
}
和
@Entity
public class BookingInfo {
@Id
private Long id;
@OneToOne
@JoinColumn(name = "booking_id")
private Booking booking
// getters & setters
}
BookingInfo
现在,即使Booking
数据库中没有相关条目,我也需要能够持久化实体。
BookingInfo bookingInfo = new BookingInfo();
bookingInfo.setId(1);
Booking booking = new Booking();
booking.setId(182); // let's say that there's no booking with id 182 in my database, but I still need to persist this bookingInfo
bookingInfo.setBooking(booking);
bookingInfoRepository.save(bookingInfo); // using Spring Data JPA
如果我运行此代码,那么我会得到javax.persistence.EntityNotFoundException
,因为没有 id 182 的预订。
对于我使用 JPA 或 Hibernate 的情况,什么是正确的解决方法。顺便说一句,我也尝试使用 Hibernate 的@NotFound
注释。结果,save
方法不会抛出javax.persistence.EntityNotFoundException
并且实体被持久化到数据库中,但问题是booking_id
数据库中始终为空。
任何帮助,将不胜感激。