Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/visual-studio-code/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 带POJO转换器的Jooq_Java_Database_Jooq_Pojo_Jooq Codegen Maven - Fatal编程技术网

Java 带POJO转换器的Jooq

Java 带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

我正试图在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;i 问候,

Stefano

错误在这里:

PLCDATA记录PLCDATA记录=context.newRecordPLC\u数据,plcEvents; 您希望将POJO列表转换为单个记录,这是没有意义的。将该逻辑移到循环中,而不是:

列表记录=新的ArrayList; 长时间i=0;我从来没有经历过;i++{ PlcEventBean eventBean=新的PlcEventBean; eventBean.setIdi; eventBean.setEventDateInstant.now.plusi,ChronoUnit.MINUTES; eventBean.setMaxForceMath.absr.nextInt; records.addcontext.newRecordPLC_数据,eventBean; } context.batchInsertrecords; 旁注 只需将您的类型重写为,而不是滚动您自己的转换器:

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.*'
}