JOOQ Cast String naar Enum met Converter

stemmen
0

Terwijl ik op zoek naar een manier om mijn String veld in een Enum i stubled over de uitgebrachte .cast()Method. Toen noemde het gooit een SQLDialectNotSupportedException.
Dialect is ingesteld op SQLSERVER2014in de context DSLContext create = DSL.using(conn, SQLDialect.SQLSERVER2014);.
De betreffende regel:

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

De volledige Fout:

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)

Ik heb geprobeerd om een ​​conversie naar het Enum met een convertor te bereiken, maar ik kan niet krijgen om draait.

Is er een manier om de Converter te krijgen in het cast()of is er een andere manier om de string in de Enum ik kan niet vinden krijgen?

De vraag is gesteld op 24/10/2019 om 11:52
bron van user
In andere talen...                            


1 antwoorden

stemmen
1

U kunt niet cast()hier, want dat jOOQ zou vereisen om te begrijpen hoe u uw gegevens soort gegoten om uw aangepaste soort in SQL . Wat u wilt doen is een client-side conversie, en dat wordt bereikt bij uitstek met behulp van een Converter.

Als je eenmaal hebt geïmplementeerd je Converter, de beste manier om het te gebruiken is om het te hechten aan gegenereerde code met behulp van de code generator: 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>

Als dat geen optie is, kunt u een "bekeerd" veldverwijzing te creëren als volgt:

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

Maar ik echt aanraden het bevestigen van de converter om de gegenereerde code voor het grootste gemak.

antwoordde op 24/10/2019 om 14:37
bron van user

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