现在,我想知道何时需要@MapKeyTemporal注释以及何时可选…
我知道当你使用@MapKeyColumn定义地图密钥的列时,可以通过查看列的类型(以及columndeFinition中的类型)来导出应该映射到的键的类型.因此,在这种情况下,不需要@MapKeyTemporal注释.
附加@MapKeyTemporal注释时,列名默认为ATTRIBUTE“_KEY”.
如果不注释@MapKeyColumn和@MapKeyTemporal,则列名默认为ATTRIBUTE“_KEY”,但键的默认值是什么类型?或者你应该得到一个错误?
我寻找类似的情况,发现@MapKeyEnumerated.
它是相同的,因为它与@MapKeyColumn相关,它是一个可以映射到多种数据类型的值(@MapKeyTemporal的java.sql.Date/java.sql.Time/java.sql.Timestamp和EnumeratedType.ORDINAL / EnumeratedType.STRING for @MapKeyEnumerated).
我发现了一个区别:
@MapKeyEnumerated有一个默认值.此默认值为EnumeratedType.ORDINAL.
我的问题:
当使用具有基本类型为临时类型的映射键的映射时,映射键转换为持久性的默认TemporalType(根据JPA 2.0)是什么?
解决方法
This annotation must be specified for persistent map keys of type Date
and Calendar.
我认为如此严格,他们忘记了你提出的情况,从MapKey引用的属性中获取类型信息.在MapKey的情况下指定类型没有多大意义,因为类型已经在作为映射值的实体中指定.还期望允许对于实体中的对应字段的地图的关键字具有不同时间类型的可能性.
如果未指定MapKeyTemporal并且没有其他方法来确定键的类型,则EclipseLink(参考实现,尽管它并不总是遵循规范)会产生以下异常:
org.eclipse.persistence.exceptions.ValidationException Exception Description: The attribute [map] from the entity class [class X] does not specify a temporal type. A temporal type must be specified for persistent fields or properties of type java.util.Date and java.util.Calendar. at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.exceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。