在休眠中建模实体

问题描述 投票:0回答:1

这是在线电影票预订系统(如预订我的节目)预订门票的用例。

要求

  • 有剧院。
  • 剧院有座位。
  • 剧院里有一场演出和电影一起播放。
  • 用户预订演出座位。
  • (表演 + 座位)组合应该是唯一的,并且只能由一名用户预订。 (无需担心付款失败/重新预订)

可以创建以下实体

########################################

Theater
    - name: String
    - seats: List<Seats> 
Seat
    - name: String
    - theater: Theater
Movie
    - name: String
Show
    - theater: Theater
    - movie: Movie
    - startTime: LocalDateTime
    - endTime: LocalDateTime
User
    - name: String
    - email: String

########################################

Booking
    - user: User
    - bookedShowSeats: List<ShowSeat>
ShowSeat
    - show: Show
    - seat: Seat

########################################

在 hibernate 中应该如何建模?

对此有几个问题:

  1. 我不想为
    ShowSeat
    创建一个新实体(使用hibernate可以吗?为了在没有实体的情况下建模一对多关系,我阅读了@Embeddable,但无法让它工作)
  2. 如何对(表演+座位)唯一约束进行建模?
spring-boot hibernate spring-data-jpa spring-data spring-data-rest
1个回答
0
投票

下面的模型定义了实体

Theater
Seat
Movie
Show
User
Booking
ShowSeat
,其中
ShowSeat
标记为
@Embeddable
表示复合主键。

import javax.persistence.*;

@Entity
public class Theater {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @OneToMany(mappedBy = "theater", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<Seat> seats = new ArrayList<>();

    // Getters and setters
}

@Entity
public class Seat {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    @ManyToOne
    private Theater theater;

    // Getters and setters
}

@Entity
public class Movie {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    // Getters and setters
}

@Entity
public class Show {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    private Theater theater;

    @ManyToOne
    private Movie movie;

    private LocalDateTime startTime;

    private LocalDateTime endTime;

    // Getters and setters
}

@Entity
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String name;

    private String email;

    // Getters and setters
}

@Embeddable
public class ShowSeatId implements Serializable {
    private Long showId;

    private Long seatId;

    // getters and setters
}

@Entity
public class Booking {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @ManyToOne
    private User user;

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    private List<ShowSeat> bookedShowSeats = new ArrayList<>();

    // Getters and setters
}

@Entity
public class ShowSeat {
    @EmbeddedId
    private ShowSeatId id;

    @ManyToOne
    @MapsId("showId")
    private Show show;

    @ManyToOne
    @MapsId("seatId")
    private Seat seat;

    // Getters and setters
}

请记住配置 Hibernate 和 JPA 配置。

我希望这有帮助✌🏻

© www.soinside.com 2019 - 2024. All rights reserved.