【发布时间】:2022-12-11 19:35:17
【问题描述】:
我正在定义一个类 User,它是我的其他两个类的父类:提交者和受让人。用户列出了我的所有属性,提交者和受让人将仅继承其所有属性。一个提交者可以提交很多请求。
我编码的模型如下所示:
用户
package com.merck.trackertest.models;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.Table;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Data
@NoArgsConstructor
@Table(name = "users")
@Inheritance(strategy = InheritanceType.JOINED)
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String firstName;
private String lastName;
private String isid;
private String email;
public User(String firstName, String lastName, String isid, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.isid = isid;
this.email = email;
}
}
提交者
package com.merck.trackertest.models;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.OneToMany;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
@Entity
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
public class Submitter extends User {
@OneToMany(
cascade = CascadeType.ALL,
orphanRemoval = true
)
@JoinColumn(
name = "submitter_id",
referencedColumnName = "id"
)
private List<Request> requests = new ArrayList<>();
public Submitter(String firstName, String lastName, String isid, String email) {
super(firstName, lastName, isid, email);
}
public void addToList(Request request) {
requests.add(request);
}
public void deleteFromList(Request request) {
requests.remove(request);
}
}
要求
package com.merck.trackertest.models;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import lombok.Data;
import lombok.NoArgsConstructor;
@Entity
@Data
@NoArgsConstructor
@Table(name = "requests")
public class Request {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
private String receivedDate;
private String startDate;
private String endDate;
private String requestNumber;
@ManyToOne
@JoinColumn(name = "submitter_id", referencedColumnName = "id")
private Submitter submitter;
private String assigneeId;
private String status;
public Request(String receivedDate, String startDate, String requestNumber, String status) {
this.receivedDate = receivedDate;
this.startDate = startDate;
this.requestNumber = requestNumber;
this.status = status;
}
}
到目前为止,我还没有为 Assignee 表建模。
我担心的是表 Submitter 除了 id 之外没有显示任何东西,有没有办法将带有 id 的数据呈现给请求列表。在这里使用@Embeddable 和@Embedded 最有意义吗,即使我已将 Request 定义为实体,我也可以这样做吗?引用使用继承的 OneToMany 双向关系的正确方法是什么。
表格如下所示,但未提供任何有用的信息。
【问题讨论】:
标签: java spring spring-boot hibernate jpa