Apache Ignite中TIMESTAMP与java.util.Date映射问题求助
Apache Ignite与Hibernate:TIMESTAMP到java.util.Date映射失败的解决方案
我正在负责一个已有10多年历史的产品重构项目,引入Apache Ignite提升系统可扩展性,同时项目依赖Hibernate自动生成的400多个Java实体类。当前遇到数据库侧java.sql.Types.TIMESTAMP类型到Java侧java.util.Date类型的映射问题,具体情况如下:
相关Ignite配置
<bean class="org.apache.ignite.cache.store.jdbc.JdbcTypeField"> <constructor-arg> <util:constant static-field="java.sql.Types.TIMESTAMP"/> </constructor-arg> <constructor-arg value="create_date"/> <constructor-arg value="java.util.Date"/> <constructor-arg value="createDate"/> </bean>
运行时异常
Failed to deserialize object [typeName=jp.xxxx.xxx.xxx.xxx.xxx.bean.PlayerXXXXBean]: class org.apache.ignite.binary.BinaryObjectException: Failed to read field [name=createDate] ... Caused by: class org.apache.ignite.binary.BinaryObjectException: Unexpected field type [pos=49, expected=Date, actual=-2]
约束条件与需求
- 无法修改Hibernate生成的实体类,不能将
java.util.Date改为java.sql.Timestamp - 无法为400多个类逐个添加自定义marshaller
- 已知Ignite官方不支持该直接映射,希望通过修改Ignite marshaller或其他全局方案从根本上解决映射问题
- 数据库用TIMESTAMP而实体用Date会丢失毫秒数,该映射无法避免
目前我考虑的方向是为Hibernate生成的Bean创建对应Date的Timestamp包装setter和getter,通过这些方法更新私有Date成员,但不确定是否可行或有更优方案。恳请提供可行的解决方案建议。
内容的提问来源于stack exchange,提问作者Ryo-chan
相关产品推荐
相关产品推荐

