【发布时间】:2014-03-26 12:33:21
【问题描述】:
是否可以像这样将 java.time.Month 列表映射到单独的表:
|MyEntity | |MyEntity_Month | |Month |
|---------------------| |------------------| |---------------|
|id : long | |myEntity_Id : long| |id : long |
| |----|month_Id : long |----| |
|---------------------| |------------------| |---------------|
我已经这样尝试过了,但它只创建了一个带有 myEntity_Id 和值的表 MyEntity_Month:
@ElementCollection(targetClass = Month.class, fetch = FetchType.EAGER)
@Enumerated(EnumType.STRING)
@CollectionTable(name = "MyEntity_Months"
, joinColumns = @JoinColumn(name = "myEntity_id"))
private List<Month> months;
该解决方案的问题是每个 MyEntity 的值都是重复的,而不是关联的。上述注解配置的数据库视图:
|MyEntity | |MyEntity_Month |
|---------------------| |-----------------------|
|id : long | |myEntity_id | MONTH |
|... |----|-----------------------|
|---------------------| |1 | NOVEMBER |
|1 | DECEMBER |
|2 | JANUARY |
|2 | DECEMBER |
|-----------------------|
是否可以通过关联表进行映射,以便我只需要数据库中的 12 个月字符串?我正在使用 Hibernate 4.3 / JPA 2.1 顺便说一句
【问题讨论】:
-
你能解释一下这与 Java 8 有什么关系吗?
-
java.time.Month 是 Java 8 类型。也许对于这个特定的例子有一个解决方法,比如 Jadira Usertype 之类的 Java 8 时间映射器。
标签: java hibernate enums java-8