Java JOOQ使用转换器将字符串强制转换为枚举
在寻找将我的字符串字段强制转换为枚举的方法时,我在Java JOOQ使用转换器将字符串强制转换为枚举,java,sql-server,enums,jooq,Java,Sql Server,Enums,Jooq,在寻找将我的字符串字段强制转换为枚举的方法时,我在.cast()方法中使用了stub。调用时,它会抛出一个sqldialennotsupportedException 方言已在上下文DSLContext create=DSL.using(conn,sqldialent.SQLSERVER2014)中设置为SQLSERVER2014 对应的行: create.select( ... lecture.DAY_OF_WEEK.cast(DayOfWeek.class), ... ); 完整错误:
.cast()
方法中使用了stub。调用时,它会抛出一个sqldialennotsupportedException
方言已在上下文
DSLContext create=DSL.using(conn,sqldialent.SQLSERVER2014)中设置为SQLSERVER2014
代码>
对应的行:
create.select( ... lecture.DAY_OF_WEEK.cast(DayOfWeek.class), ... );
完整错误:
org.jooq.exception.SQLDialectNotSupportedException: Type class java.time.DayOfWeek is not supported in dialect null
at org.jooq.impl.DefaultDataType.getDataType(DefaultDataType.java:944)
at org.jooq.impl.DefaultDataType.getDataType(DefaultDataType.java:880)
at org.jooq.impl.AbstractField.cast(AbstractField.java:256)
at de.esteam.lecturedb.jooq.Classes.Startup.getStandardExample(Startup.java:218)
at de.esteam.lecturedb.jooq.Classes.Startup.main(Startup.java:54)
我试图用转换器实现对枚举的转换,但无法使其运行
有没有办法将转换器转换到cast()
中,或者有没有其他办法将字符串转换到我找不到的枚举中?这里不能使用cast()
,因为这需要jOOQ了解如何将数据类型转换为SQL中的自定义类型。您要做的是客户端转换,理想情况下,这是使用转换器实现的
一旦实现了转换器
,建议使用它的方法是使用代码生成器将其附加到生成的代码:
java.time.DayOfWeek
com.example.YourConverter
(?i:一周中的第二天)
如果这不是一个选项,您可以创建一个“转换”字段引用,如下所示:
// I'm assuming you're storing the data as an INTEGER
DataType<DayOfWeek> type = SQLDataType.INTEGER.asConvertedDataType(new YourConverter());
Field<DayOfWeek> field = DSL.field("{0}", type, lecture.DAY_OF_WEEK);
// And now use that instead
create.select(field)...
//我假设您将数据存储为整数
DataType type=SQLDataType.INTEGER.asConvertedDataType(newyourconverter());
Field=DSL.Field(“{0}”,类型,讲座。每周一天);
//现在用它来代替
创建。选择(字段)。。。
但我真的建议将转换器附加到生成的代码中,以获得最大的便利。谢谢,这正是我想要的。但是我不能使用第一种方法(现在),所以它必须是第二种方法。我创建了转换器public类DOWConverter extensed EnumConverter{public DOWConverter(){super(Integer.class,DayOfWeek.class);}
但是我得到了一个错误:在new DOWConverter()上没有可访问的QueryFeaturesTask类型的关闭实例
从您的suggestion@recklessGreed你能问一个新问题吗?注释部分对于代码和调试代码来说不是很好…当然!先谢谢你。