【问题标题】:How to map many dates to a booking in hibernate and avoid redundancies?如何将多个日期映射到休眠状态的预订并避免冗余?
【发布时间】:2016-06-23 06:55:21
【问题描述】:

假设一个预订可以有多个日期!我认为我的代码有点多余,因为我必须将 booking_date 插入到 bookingbookingbooking_date

采用以下结构,一个预订可以附有 1 个或多个日期(在这种情况下,对您来说可能没有多大意义。)

预订日期:

@Entity
@Table(name="booking_date")
public class BookingDate {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="booking_date_id")
private int id;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Column(name="start_date")
private Date startDate;

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
@Column(name="end_date" )
private Date endDate;

@ManyToOne
@JoinColumn(name = "booking_id")
private Booking booking;

预订:

@Entity
@Table(name="booking")
public class Booking {

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="booking_id")
private int bookingId;

// One booking to one booking date...
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "booking")
private BookingDate bookingDate;

我认为我在这里做错了,因为当我将预订插入数据库时​​,我必须将预订插入 booking_date,反之亦然。

让我们从我的代码中提取以下示例...插入具有多个日期的预订。

@RequestMapping(value="create/booking", method=RequestMethod.POST,  produces = {MediaType.APPLICATION_JSON_VALUE })
    Booking bookingCreate(@RequestBody BookingContext bookingcont, BindingResult bindingResult) {

 Booking booking = new Booking();

我已经创建了预订实体,现在我需要在该预订中插入一堆日期。首先,我必须遍历BookingDateList 并将我们在上面创建的预订设置为每个人(我觉得这可以避免)?

List<BookingDate> bookingDates = <Pretend this is a list of BookingDate objects>
// Loop through bookingdates and assign the booking obj to each of them
for (BookingDate bookingDate : bookingDates) {
   bookingDate.setBookingDate(bookingDate);
}

然后我会将 bookingDates 对象分配给我们的预订对象:

booking.setBookingDate(bookingDates); // Insert multiple booking dates for the booking

【问题讨论】:

    标签: mysql hibernate database-design


    【解决方案1】:

    应该是这样的

    Booking booking = new Booking();
    //setting data in booking
    List<BookingDate> bookingDates = <Pretend this is a list of BookingDate objects>
    booking.setBookingDate(bookingDates);
    session.save(booking);
    

    这应该起作用的原因是因为预订中有Cascade.ALL,因此保存booking应该保存关联的bookingdate

    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "booking")
    private BookingDate bookingDate;
    

    您也不需要在每个bookingdate 中设置booking,因为级联来自booking 而不是来自bookingdate,因此booking 需要知道存在bookingdate 的列表,反之亦然. 希望这会有所帮助

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-16
      • 1970-01-01
      • 1970-01-01
      • 2014-01-06
      • 1970-01-01
      • 2010-09-18
      • 2014-10-29
      • 2023-03-14
      相关资源
      最近更新 更多