java – 没有@MapKeyColumn或@MapKeyTemporal注释的时态映射键的
我正在为我的实习创建一个JPA 2.0 Annotation compliancy kit.
现在,我想知道何时需要@MapKeyTemporal注释以及何时可选… 我知道当你使用@MapKeyColumn定义地图密钥的列时,可以通过查看列的类型(以及columndefinition中的类型)来导出应该映射到的键的类型.因此,在这种情况下,不需要@MapKeyTemporal注释. 附加@MapKeyTemporal注释时,列名默认为ATTRIBUTE“_KEY”. 如果不注释@MapKeyColumn和@MapKeyTemporal,则列名默认为ATTRIBUTE“_KEY”,但键的默认值是什么类型?或者你应该得到一个错误? 我寻找类似的情况,发现@MapKeyEnumerated. 我的问题: 解决方法
答案似乎是,当java.util.Date或java.util.Calendar用作地图的关键字时没有默认类型.规范本身(我确实认为javadocs与规范一起提供,作为规范的一部分)对MapKeyTemporal的使用非常严格. MapKeyTemporal的
Javadoc声称:
我认为如此严格,他们忘记了你提出的情况,从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) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |