JOOQ Cast String la Enum cu Converter

voturi
0

În timp ce caută o modalitate de a -și exprima câmpul meu String într - un Enum i stubled peste .cast()metoda. Când a numit - o aruncă SQLDialectNotSupportedException.
Dialect a fost setat SQLSERVER2014în context DSLContext create = DSL.using(conn, SQLDialect.SQLSERVER2014);.
Linia corespunzătoare:

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

Completă Eroare:

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)

Am încercat să realizeze o conversie la ENUM cu un convertor, dar nu pot să-l rulează.

Există o modalitate de a obține convertor în cast()sau există o altă modalitate de a obține String în ENUM eu nu pot găsi?

Întrebat 24/10/2019 la 11:52
sursa de către utilizator
În alte limbi...                            


1 răspunsuri

voturi
1

Nu puteți utiliza cast()aici , pentru că ar avea nevoie jOOQ să înțeleagă cum să arunce tipul de date pentru tipul personalizat în SQL . Ce doriți să faceți este o conversie pe partea de client, și care se realizează în mod ideal , cu ajutorul unui Converter.

După ce ați implementat dvs. Converter, modul în care a recomandat să - l folosească este să - l atașați la codul generat folosind generatorul de cod: 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>

În cazul în care nu este o opțiune, puteți crea o referință câmp „convertit“, după cum urmează:

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

Dar eu chiar recomand atașarea convertorului la codul generat pentru cele mai multe convience.

Publicat 24/10/2019 la 14:37
sursa de către utilizator

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