Java 带POJO转换器的Jooq
我正试图在Jooq的帮助下实现一个软件,将数据读写到h2数据库中。 我的PLC_数据表有一个带有时间戳的列,该列通常映射到LocalDateTime,但我需要将该数据映射到POJO中的Instant,因此我编写了自定义转换器: 公共类TimestampConverter实现转换器{ 私有静态最终长serialVersionUID=-2866811348870878385L; /** *将{@code LocalDateTime}转换为{@code Instant} */ @凌驾 公共即时fromLocalDateTime数据库对象{ 返回databaseObject.toInstantZoneOffset.UTC; } /** *将{@code Instant}转换为{@code Timestamp} */ @凌驾 公共LocalDateTime到Instant用户对象{ 返回userObject.atZoneZoneOffset.UTC.toLocalDateTime; } /** *从类返回类型 */ @凌驾 公共类fromType{ 返回LocalDateTime.class; } /** *将类型返回到类 */ @凌驾 公共类toType{ 返回Instant.class; } } 我在build.gradle文件中引用了forcedType: 我已经在我的POJO上做了注释: 公共类PlcEventBean实现了可序列化{ 私有静态最终长SerialVersionId=1988924276212981713L; @Columnname=ID 公共长id=0; @Columnname=事件\即时 公共即时事件Instant=Instant.ofEpochMilli0; @Columnname=最大作用力 私人int maxForce; /** *获取事件ID *@param id这个id */ 公共长getId{ 返回id; } /** *设置事件ID *@param id这个id */ 公共无效setIdlong id{ this.id=id; } /** *事件的GMT瞬间 *@返回事件的瞬间 */ 公共即时getEventDate{ 返回事件即时; } /** *设置事件的瞬间 *@param eventInstant要设置的瞬间 */ public void setEventDateInstant eventInstant{ this.eventInstant=eventInstant; } /** *用于该事件的最大力 *@返回使用的最大力 */ 公共int getMaxForce{ 返回最大力; } /** *设置用于事件的最大力 *@param maxForce最大力的值 */ public void setmaxforcint maxForce{ this.maxForce=maxForce; } } 当我从DB读到我的POJO时,代码就像一个符咒,如下所示: 公共列表fetchDataint偏移量、int限制、DataFilter筛选器{ Instant fromInstant=filter.getFromInstant; Instant to Instant=filter.getToInstant; 字符串id=filter.getId; List plcEventBeans=context.select .fromPLC_数据 哪里 PLC_DATA.EVENT_INSTANT.greater大于FromInstant .AND PLC_DATA.EVENT_INSTANT.lesst hantoinstant .和PLC_数据.ID.like%+ID+% .抵销 .limitlimit .fetchintopliceventbean.class; logger.infoFetched{},偏移量:{}限制:{},fromDateTime{},toDateTime{},textSearch{} ,plcEventBeans.size 抵消 限度 ,fromInstant ,toInstant 身份证件 ; 返回plcEventBeans; } 但当我尝试在数据库中写入一些数据时,我在尝试生成新记录时遇到了一个异常: 公共void生成器域值{ int-nEvents=40000; 随机r=新随机0; List plcEvents=新阵列列表; 长时间i=0;iJava 带POJO转换器的Jooq,java,database,jooq,pojo,jooq-codegen-maven,Java,Database,Jooq,Pojo,Jooq Codegen Maven,我正试图在Jooq的帮助下实现一个软件,将数据读写到h2数据库中。 我的PLC_数据表有一个带有时间戳的列,该列通常映射到LocalDateTime,但我需要将该数据映射到POJO中的Instant,因此我编写了自定义转换器: 公共类TimestampConverter实现转换器{ 私有静态最终长serialVersionUID=-2866811348870878385L; /** *将{@code LocalDateTime}转换为{@code Instant} */ @凌驾 公共即时from
forcedType {
name = 'INSTANT'
includeTypes = 'TIMESTAMP.*'
}
谢谢我的错,对不起;这很容易。也谢谢你的建议。@StefanoBossi:这是最好的:
org.jooq.exception.DataTypeException: Cannot convert from it.fox.plcwebgui.plc.PlcEventBean@2a389173 (class it.fox.plcwebgui.plc.PlcEventBean) to class java.time.LocalDateTime
at org.jooq.tools.Convert$ConvertAll.fail(Convert.java:1200)
at org.jooq.tools.Convert$ConvertAll.from(Convert.java:1089)
at org.jooq.tools.Convert.convert0(Convert.java:324)
at org.jooq.tools.Convert.convert(Convert.java:316)
at org.jooq.tools.Convert.convert(Convert.java:387)
at org.jooq.impl.DefaultDataType.convert(DefaultDataType.java:827)
at org.jooq.impl.ConvertedDataType.convert(ConvertedDataType.java:114)
at org.jooq.impl.Tools.setValue(Tools.java:2823)
at org.jooq.impl.DefaultRecordUnmapper$IterableUnmapper.unmap(DefaultRecordUnmapper.java:189)
at org.jooq.impl.DefaultRecordUnmapper.unmap(DefaultRecordUnmapper.java:102)
at org.jooq.impl.AbstractRecord.from0(AbstractRecord.java:837)
at org.jooq.impl.AbstractRecord.from(AbstractRecord.java:867)
at org.jooq.impl.DefaultDSLContext$6.operate(DefaultDSLContext.java:4019)
at org.jooq.impl.RecordDelegate.operate(RecordDelegate.java:130)
at org.jooq.impl.DefaultDSLContext.newRecord(DefaultDSLContext.java:4015)
at it.fox.plcwebgui.plc.PlcEventServiceDatabaseImp.generateRandomValues(PlcEventServiceDatabaseImp.java:120)
at it.fox.plcwebgui.utils.db.PlcEventServiceDatabaseImpTest.generateRandomValuesTest01(PlcEventServiceDatabaseImpTest.java:128)
forcedType {
name = 'INSTANT'
includeTypes = 'TIMESTAMP.*'
}