JOOQ Cordas Cast para Enum com Converter

votos
0

Embora a procura de uma maneira de lançar meu campo String em um Enum i stubled através do .cast()Método. Quando chamado ele lança uma SQLDialectNotSupportedException.
Dialeto foi definido para SQLSERVER2014no Contexto DSLContext create = DSL.using(conn, SQLDialect.SQLSERVER2014);.
A linha correspondente:

create.select( ... lecture.DAY_OF_WEEK.cast(DayOfWeek.class), ... );  

O erro completa:

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)

Tentei conseguir uma conversão para o Enum com um conversor, mas não posso fazê-lo funcionar.

Existe uma maneira de obter o conversor para o cast()ou há outra maneira de obter a string no Enum eu não posso encontrar?

Publicado 24/10/2019 em 11:52
fonte usuário
Em outras línguas...                            


1 respostas

votos
1

Você não pode usar cast()aqui, porque isso exigiria jOOQ para entender como para lançar o seu tipo de dados para o seu tipo personalizado no SQL . O que você quer fazer é uma conversão do lado do cliente, e que é alcançado o ideal é usar um Converter.

Depois de ter implementado a sua Converter, a maneira recomendada para usá-lo é para anexá-lo ao código gerado usando o gerador de código: 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>

Se isso não é uma opção, você pode criar uma referência de campo "convertidos", como segue:

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

Mas eu realmente recomendo colocar o conversor para o código gerado para mais conveniência.

Respondeu 24/10/2019 em 14:37
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more