JPA:在一个类中创建新的联接表

时间:2018-07-27 19:15:07

标签: java jpa orm

我已经为此苦苦挣扎了一段时间,到目前为止,在互联网上找不到任何有用的信息。

我目前正在从事一个项目,该项目可用作披萨外卖公司(大学)的管理工具。

我有一个类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;}

1 个答案:

答案 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);
}