java – 没有@MapKeyColumn或@MapKeyTemporal注释的时态映射键的默认TemporalType是什么?

我正在为我的实习创建一个JPA 2.0 Annotation compliancy kit.
现在,我想知道何时需要@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)是什么?

解决方法

答案似乎是,当java.util.Date或java.util.Calendar用作地图的关键字时没有认类型.规范本身(我确实认为javadocs与规范一起提供,作为规范的一部分)对MapKeyTemporal的使用非常严格. MapKeyTemporal的 Javadoc声称:

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 举报,一经查实,本站将立刻删除。

相关推荐


应用场景 C端用户提交工单、工单创建完成之后、会发布一条工单创建完成的消息事件(异步消息)、MQ消费者收到消息之后、会通知各处理器处理该消息、各处理器处理完后都会发布一条将该工单写入搜索引擎的消息、最终该工单出现在搜索引擎、被工单处理人检索和处理。 事故异常体现 1、异常体现 从工单的流转记录发现、
线程类,设置有一个公共资源 package cn.org.chris.concurrent; import java.util.concurrent.locks.Lock; import java.util.concurrent.locks.ReentrantLock; /** * @Descrip
Java中的数字(带有0前缀和字符串)
在Java 9中使用JLink的目的是什么?
Java Stream API Filter(过滤器)
在Java中找到正数和负数数组元素的数量
Java 9中JShell中的不同启动脚本是什么?
使用Java的位填充错误检测技术
java中string是什么
如何使用Java中的JSON-lib API将Map转换为JSON对象?
Java菜单驱动程序以检查数字类型
使用Junit的Maven项目 - 检查银行账号
JAVA编程基础
在Java中使用throw、catch和instanceof来处理异常
在Java中,将数组分割为基于给定查询的子数组后,找到子数组的最大子数组和
如何在Java中从给定的字符串中删除HTML标签?
在PHP中,IntlChar getBlockCode()函数的翻译如下:
如何在Android中实现按下返回键再次退出的功能?
如何使用Java中的流式API解析JSON字符串?
Java中的模式类