JOOQ Cast Chaîne à Enum Converter

voix
0

Alors que la recherche d'un moyen de jeter mon champ String en un Enum i stubled à travers la .cast()méthode. Quand appelé jette un SQLDialectNotSupportedException.
Dialect a été réglé SQLSERVER2014dans le contexte DSLContext create = DSL.using(conn, SQLDialect.SQLSERVER2014);.
La ligne correspondant:

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

La pleine erreur:

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)

J'ai essayé d'obtenir une conversion au Enum avec un convertisseur, mais je ne peux pas le faire fonctionner.

Y at - il un moyen d'obtenir le convertisseur dans le cast()ou est - il une autre façon d'obtenir la chaîne dans le Enum je ne peux pas trouver?

Créé 24/10/2019 à 11:52
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Vous ne pouvez pas utiliser cast()ici car cela nécessiterait jOOQ de comprendre comment lancer votre type de données à votre type personnalisé dans SQL . Qu'est - ce que vous voulez faire est une conversion côté client, et est idéalement réalisée en utilisant un Converter.

Une fois que vous avez mis en place votre Converter, la méthode recommandée pour l' utiliser est de l' attacher au code généré en utilisant le générateur de code: 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>

Si ce n'est pas une option, vous pouvez créer une référence de champ « converti » comme suit:

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

Mais je vous recommande vraiment de fixer le convertisseur au code généré pour la plupart convience.

Créé 24/10/2019 à 14:37
source utilisateur

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