Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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 JOOQ强制类型代码生成_Java_Postgresql_Type Conversion_Jooq - Fatal编程技术网

Java JOOQ强制类型代码生成

Java JOOQ强制类型代码生成,java,postgresql,type-conversion,jooq,Java,Postgresql,Type Conversion,Jooq,我在使用强制类型(JOOQ 3.3,Postgres 9.3)生成代码时遇到一些问题 试图将sql时间戳转换为joda DateTime,会导致编译错误 我的桌子: CREATE TABLE book ( // [...] 日期\u发布的时间戳,不带时区, // [...] ); 和my.xml配置: /[…] java.sql.Timestamp com.plannow.jooq.converters.DateTimeConverter java.sql.Timestamp .\.日期* .

我在使用强制类型(JOOQ 3.3,Postgres 9.3)生成代码时遇到一些问题

试图将sql时间戳转换为joda DateTime,会导致编译错误

我的桌子:

CREATE TABLE book
(
// [...]
日期\u发布的时间戳,不带时区,
// [...]
);
和my.xml配置:

/[…]
java.sql.Timestamp
com.plannow.jooq.converters.DateTimeConverter
java.sql.Timestamp
.\.日期*
.*
// [...]
DateTimeConverter类:

公共类DateTimeConverter实现转换器
{
@凌驾
public DateTime from(时间戳数据库对象)
{
返回新的日期时间(databaseObject);
}
@凌驾
公共时间戳到(DateTime用户对象)
{
返回新的时间戳(userObject.getMillis());
}
@凌驾
公共类fromType()
{
返回Timestamp.class;
}
@凌驾
公共类toType()
{
returndatetime.class;
}
}
因此,BOOK.DATE_Publishing的生成方式如下:

public final org.jooq.TableField DATE_PUBLISHED=createField(“DATE_PUBLISHED”,org.jooq.impl.SQLDataType.TIMESTAMP,this,”,new com.plannow.jooq.converters.DateTimeConverter());
这会导致编译错误:

类型不匹配:无法从TableField转换为TableField。
我知道我可以将
DATE\u PUBLISHED
的类型更改为
TableField
并重构代码,但我不想手动修补生成的类

你知道我做错了什么吗?

你的
元素应该指你的
类型(用户类型),而不是
类型(数据库类型)。所以,如果你写这篇文章:


java.sql.Timestamp
com.plannow.jooq.converters.DateTimeConverter
然后您实际上只是注册了一个
转换器
。请尝试以下方法:


org.joda.time.DateTime
com.plannow.jooq.converters.DateTimeConverter
请注意,转换器还应正确处理
null
值:

@覆盖
公共日期时间自(时间戳t){
返回t==null?null:新的日期时间(t);
}
@凌驾
公共时间戳到(日期时间u){
返回u==null?null:新的时间戳(u.getMillis());
}

非常感谢您的快速回答。我真不知道我怎么会错过“评论”。无论如何,谢谢again@user3215799:它发生在最好的人身上;-)