JOOQ Cast String με Enum με μετατροπέα

ψήφοι
0

Ενώ ψάχνει για έναν τρόπο να ρίχνει το πεδίο String μου σε ένα Enum i stubled σε όλη την .cast()Μέθοδο. Όταν καλείται να ρίχνει ένα SQLDialectNotSupportedException.
Διάλεκτο έχει οριστεί για SQLSERVER2014το Πλαίσιο DSLContext create = DSL.using(conn, SQLDialect.SQLSERVER2014);.
Η αντίστοιχη γραμμή:

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

Η πλήρης Σφάλμα:

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)

Προσπάθησα να επιτευχθεί μια μετατροπή σε Enum με ένα μετατροπέα, αλλά δεν μπορώ να πάρω το τρέξιμο.

Υπάρχει ένας τρόπος για να πάρετε το μετατροπέα στον cast()ή είναι ένας άλλος τρόπος για να πάρετε το String στο Enum δεν μπορώ να βρω εκεί;

Δημοσιεύθηκε 24/10/2019 στις 11:52
πηγή χρήστη
Σε άλλες γλώσσες...                            


1 απαντήσεις

ψήφοι
1

Δεν μπορείτε να χρησιμοποιήσετε cast()εδώ γιατί αυτό θα απαιτούσε jOOQ να καταλάβει πώς να ρίχνει τον τύπο των δεδομένων σας στο προσαρμοσμένο τύπο σας στην SQL . Τι θέλετε να κάνετε είναι μια πλευρά του πελάτη μετατροπής, και ότι επιτυγχάνεται ιδανικά χρησιμοποιώντας ένα Converter.

Μόλις εφαρμοστεί σας Converter, ο συνιστώμενος τρόπος για να το χρησιμοποιήσετε είναι να το συνδέσετε με κώδικα που έχει δημιουργηθεί με τη χρήση της γεννήτριας κώδικα: 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>

Αν αυτό δεν είναι μια επιλογή, μπορείτε να δημιουργήσετε ένα «μετατραπεί» αναφοράς στον τομέα ως εξής:

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

Αλλά ήθελα να συστήσω πραγματικά τη σύνδεση του μετατροπέα στο παραγόμενο κώδικα για τα περισσότερα convience.

Απαντήθηκε 24/10/2019 στις 14:37
πηγή χρήστη

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