【问题标题】:JPA: 2 Arraylists into 1 Database TableJPA:2 个数组列表到 1 个数据库表中
【发布时间】:2018-08-01 16:53:24
【问题描述】:

我有一个 Java 类,它代表名为Worktime 的员工的工作时间。它拥有ArrayListstartTimes 以及endTimes。我正在尝试使用以下 注释 将其映射到数据库:

@Entity
@Table(name="worktime")
public class Worktime {

    @Id
    @Column(name="worktime_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int worktimeId;

    @Column(name="date")
    @Temporal(TemporalType.DATE)
    private Date date;

    @ElementCollection
    @CollectionTable(name="WORKTIME_TIMES")
    @Temporal(TemporalType.TIME)
    private List<Date> startTimes = new ArrayList<>();

    @ElementCollection
    @CollectionTable(name="WORKTIME_TIMES")
    @Temporal(TemporalType.TIME)
    private List<Date> endTimes = new ArrayList<>();

    @ManyToOne
    @JoinColumn(name="person_id")
    private Employee employee;
 ...
}

我在数据库中得到的结构是这样的:

我想要的是这两个值在同一行中。有没有机会通过索引做到这一点?感谢您的帮助!

【问题讨论】:

  • 不,您不能将 2 个列表映射到 1 个表中,因为 JPA 提供程序如何知道在检索时将它们放入哪个列表?!!!!!!或者实际上它怎么能以你提议的方式持续存在?!

标签: java jpa h2


【解决方案1】:

创建另一个@Entity 并添加@OneToMany 关系可能会更好:

在工作时间:

...
@OneToMany
@JoinColumn(name = "worktime_id", referencedColumnName = "worktime_id")
private WorkTimeTimes times;
...

新实体 WorkTimeTimes:

@Entity
@Table(name="worktime_times")
public class WorkTimeTimes {
    @Id
    @Column(name="worktime_times_id")
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int worktimeTimesId;

    @Column(name="worktime_id")
    private int worktimeId;

    @Temporal(TemporalType.TIME)
    @Column(name="start_time")
    private Date startTime;

    @Temporal(TemporalType.TIME)
    @Column(name="end_time")
    private Date endTime;

    ...

}

【讨论】:

  • 这也是我想出的唯一方法,但我希望绕过创建另一个类,因为它需要对逻辑方法进行大量更改。好像没有别的办法了,非常感谢!
【解决方案2】:

您可以创建一个名为WorkDuration 的对象,其中包含您的两个属性(startTimeendTime)并在您的类中引用该对象的列表。 该对象可以是实体或嵌入对象。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-16
    • 1970-01-01
    • 2012-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多