背景:這是一家汽車維修店。
使用 Hiberante ORM 映射我的類時,我需要得到這個結果:
create table appointments (
id integer not null auto_increment,
appointmentNumber varchar(255),
clientName varchar(255),
clientPhone varchar(255),
primary key (id)
);
create table orders (
id integer not null auto_increment,
date datetime,
appointmentNumber varchar(255),
primary key (id)
);
create table parts (
id integer not null auto_increment,
name varchar(255),
quantity integer,
order_id integer,
primary key (id)
);
在那里,這是我迄今為止嘗試過的,但我是新手,而不是資料庫專家,我有點困惑,任何幫助我解決這個問題的幫助將不勝感激。謝謝。
預約類:
@Entity
@Table(name = "appointments")
public class Appointment {
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "appointmentNumber")
private final AppointmentNumber appointmentNumber;
@Column(name = "clientName");
private final String clientName;
@Column(name = "clientPhone");
private final String clientPhone;
訂單類
@Entity
@Table(name = "orders")
public class Order {
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "date")
private final LocalDateTime date;
@OneToOne
@JoinColumn(name = "appointmentNumber")
private final AppointmentNumber referenceNumber;
@OneToMany(targetEntity = Part.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private final List<Part> parts = new ArrayList<>();
零件類:
@Entity
@Table(name = "parts")
public class Part {
@Id
@Column(name = "id", nullable = false)
@GeneratedValue(strategy = GenerationType.AUTO)
private int id;
@Column(name = "name")
private final String name;
@Column(name = "quantity")
private final int quantity;
@ManyToOne
@JoinColumn(name = "order_id", nullable=false)
private Order order;
AppointmentNumber 課程(真的不確定我是否需要對這個課程做些什么,但我會展示課程的開始)
public class AppointmentNumber {
private static final DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyy-MM-dd");
private String number;
public static AppointmentNumber create(LocalDate date, String identifier) {
return new AppointmentNumber(date.format(FORMATTER) "-" identifier);
}
public static AppointmentNumber create(String appointmentNumberAsString) {
return new AppointmentNumber(appointmentNumberAsString);
}
private AppointmentNumber(String number) {
this.number = number;
}
uj5u.com熱心網友回復:
- 我不明白為什么你有這么多最終變數,對我來說唯一有意義的最終變數是 DateTimeFormatter
AppointmentNumber - 您
AppointmentNumber在Appointment類中使用它的方式應該用它注釋,@Embeddable并且它的型別的欄位屬性用@Embeddednot注釋@Column,但是Order類中的用法暗示AppointmentNumber它是它自己的表,因為沒有 create table 陳述句,AppointmentNumber我建議進行相同的更改inOrderas inAppointment(embeddableAppointmentNumber)。這里的另一個評論是,該類的目的到底是什么AppointmentNumber,在我看來它似乎根本不需要它,它可能只是一個 String 型別的欄位 inAppointmentandOrder,而創建約會號碼的邏輯可能在某些服務類或內部Appointment或Order - 我強烈建議不要對物體欄位型別使用原始資料型別,而是以不同的方式驗證它不為空
fetch=FetchType.EAGER這通常不是一個好主意,因為此時您無法再控制 fetch,建議將 fetch 保留為惰性并在需要時進行 fetch
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/359866.html
