我正在努力将商店的时间表保存到数据库中。
public class Shop {
@Id
private long id;
}
public class Schedule {
@Id
private long id;
@Column
@Enumerated(EnumType.STRING)
private DayOfWeek weekday;
@Column(name="time_from")
private Time from;
@Column(name="time_to")
private Time to;
@ManyToOne
@JoinColumn(name="shop_id")
private Shop shop;
}
我想要的是在Shop实例中提供时间表(一个商店可以有多个to
和from
次,例如09:00-13:00,14:00-18: 00),像这样
public class Shop {
@Id
private long id;
private Map<DayOfWeek, List<Schedule>> scheduleList = new HashMap<>();
}
但我不知道如何映射。我正在浏览JPA 2.1维基页面(https://en.wikibooks.org/wiki/Java_Persistence/Relationships#Nested_Collections.2C_Maps_and_Matrices),但条件字段是ENUM,我认为没有理由创建一个包含7行的额外表格(对于每个工作日)。有没有人使用这些功能?
编辑:可能的解决方案是将工作日划分为单独的表格:
ID
ID 名称 shop_id
ID time_from time_to week_day_id
在这种情况下,来自wiki的示例可以使用,但有没有使用任何解决方案而不是中间表只是枚举?
答案 0 :(得分:0)
如果您使用的是Java 8,那么您可以在Shop
对象
@OneToMany
private List<Schedule> scheduleList;
然后创建一个类似
的方法public Map<DayOfWeek, List<Schedule>> getScheduleListByDaysOfWeek() {
return scheduleList.stream()
.collect(Collectors.groupingBy(Schedule::getWeekday);
}