这是在线电影票预订系统(如预订我的节目)预订门票的用例。
要求
- 有剧院。
- 剧院有座位。
- 剧院里有一场演出和电影一起播放。
- 用户预订演出座位。
- (表演 + 座位)组合应该是唯一的,并且只能由一名用户预订。 (无需担心付款失败/重新预订)
可以创建以下实体
########################################
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 中应该如何建模?
对此有几个问题:
ShowSeat
创建一个新实体(使用hibernate可以吗?为了在没有实体的情况下建模一对多关系,我阅读了@Embeddable,但无法让它工作)下面的模型定义了实体
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 配置。
我希望这有帮助✌🏻