gpt4 book ai didi

java - JOOQ 使用转换器将字符串转换为枚举

转载 作者:行者123 更新时间:2023-11-30 05:26:16 25 4
gpt4 key购买 nike

在寻找一种将字符串字段转换为枚举的方法时,我偶然发现了 .cast() 方法。调用时它会抛出 SQLDialectNotSupportedException
上下文中的方言已设置为 SQLSERVER2014 DSLContext create = DSL.using(conn, SQLDialect.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 中的自定义类型。您想要做的是客户端转换,最好使用 Converter 来实现。

一旦实现了 Converter,建议的使用方法是使用代码生成器将其附加到生成的代码: https://www.jooq.org/doc/latest/manual/code-generation/custom-data-types

<forcedType>
<userType>java.time.DayOfWeek</userType>
<converter>com.example.YourConverter</converter>
<includeExpression>(?i:DAY_OF_WEEK)</includeExpression>
</forcedType>

如果这不是一个选项,您可以创建一个“转换后的”字段引用,如下所示:

// 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)...

但我真的建议将转换器附加到生成的代码中,以最方便。

关于java - JOOQ 使用转换器将字符串转换为枚举,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58538732/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com