JOOQ Fusioni Stringa da Enum con convertitore

voti
0

Mentre cerca di un modo per lanciare il mio campo String in un Enum i stubled attraverso il .cast()metodo. Quando viene chiamato viene generata SQLDialectNotSupportedException.
Dialetto è stato impostato SQLSERVER2014nel contesto DSLContext create = DSL.using(conn, SQLDialect.SQLSERVER2014);.
La linea corrispondente:

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

L'errore completo:

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)

Ho cercato di ottenere una conversione alla Enum con un convertitore, ma non riesco a farlo funzionare.

C'è un modo per ottenere il convertitore in cast()o c'è un altro modo per ottenere la stringa nella Enum non riesco a trovare?

È pubblicato 24/10/2019 alle 11:52
fonte dall'utente
In altre lingue...                            


1 risposte

voti
1

Non è possibile utilizzare cast()qui, perché ciò richiederebbe jOOQ per capire come lanciare il tipo di dati al vostro tipo personalizzato in SQL . Che cosa si vuole fare è una conversione lato client, e che si ottiene in posizione ideale con una Converter.

Una volta implementato il vostro Converter, il modo consigliato di usarlo è quello di allegarlo al codice generato utilizzando il generatore di codice: 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 questo non è un'opzione, è possibile creare un riferimento di campo "convertito" come 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)...

Ma vi consiglio davvero collegare il convertitore al codice generato per la maggior parte convenienza.

Risposto il 24/10/2019 a 14:37
fonte dall'utente

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