我已经为此苦苦挣扎了一段时间,到目前为止,在互联网上找不到任何有用的信息。
我目前正在从事一个项目,该项目可用作披萨外卖公司(大学)的管理工具。
我有一个类Employee
,其中包含ArrayList
个实例中的Worktime
个。 Worktime
类应该代表一天的工作,并且可以开始工作并暂停几次。我现在正在努力用JPA映射此类。我想要的是一个在开始时间,结束时间,暂停时间和结束暂停时间中保存的表,用worktime
引用worktimeId
表。我尝试通过仅创建所有这些元素所属的@JoinTable
来做到这一点。我如何弄清楚这些元素是相互连接的?非常感谢您抽出宝贵的时间,如果有任何不清楚的地方,我相信我可以帮您解决。
Employee
类变量的定义:
@Entity
@Table(name="employees")
@PrimaryKeyJoinColumn(name="person")
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="job")
public class Employee extends Person {
@Column(name="password")
private String password;
@Column(name="job")
private String job;
@Column(name="employee_id")
private int employeeID;
@OneToMany(mappedBy = "employee",cascade = CascadeType.ALL)
private ArrayList<Worktime> workedHours = new ArrayList<>();}
Worktime
类变量的定义:
@Entity
@Table(name="worktime")
public class Worktime {
@Id
@Column(name="worktime_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int worktimeId;
@Column(name="date")
private Date date;
@OneToMany
@JoinTable(name="WORKTIME_TIMES")
private ArrayList<Date> startTimes = new ArrayList<>();
@OneToMany
@JoinTable(name="WORKTIME_TIMES")
private ArrayList<Date> endTimes = new ArrayList<>();
@OneToMany
@JoinTable(name="WORKTIME_TIMES")
private ArrayList<Date> startPauseTimes = new ArrayList<>();
@OneToMany
@JoinTable(name="WORKTIME_TIMES")
private ArrayList<Date> endPauseTimes = new ArrayList<>();
@ManyToOne
@JoinColumn(name="employee_id")
private Employee employee;}
答案 0 :(得分:0)
我认为,只有一个一对多和 WORK-TIMES 就足够了。
@OneToMany
@JoinTable(name="WORKTIME_TIMES")
private ArrayList<Date> workTimes = new ArrayList<>();
因此,要获取所有 startTimes ,请使用
@Transient
private ArrayList<Date> startTimes = new ArrayList<>();
//Remove all other annotations
@Transient
public List<Date> getStartTimes () {
return workTimes.map(workTime -> workTime.getStartTime()).collect(Collection::toList);
}