Есть ли способ использовать собственную стратегию для сопоставления типов перечислений в JDBI3?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Есть ли способ использовать собственную стратегию для сопоставления типов перечислений в JDBI3?

Сообщение Anonymous »

У меня есть простой сценарий: перечисление отправляется в хранилище, и я хочу его извлечь. Однако я не могу использовать ни стратегию Порядковый номер, ни стратегию Имя. Сохраняемое значение является значением внутри каждого экземпляра перечисления.
TLDR: Есть ли способ зарегистрировать преобразователь, который делает одно при сохранении, а другое при извлечении?
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: я не использую posgres

Код: Выделить всё

// A simple enum
enum class N(val v: Int) {
A(10),B(15);
companion object {
val map = values(v: Int).associateBy { it.v }
fun from(v: Int) = map.getValue(v)
}
}

// A simple data class
data class A(val i: Int = 0, val n: N = N.A) {
interface Dao {
@SqlUpdate("INSERT INTO a (i) VALUE (?)")
@GetGeneratedKey
fun insert(i: Int): Int
@SqlQuery("SELECT i,n FROM a WHERE i = ?")
fun select(i: Int): A
}
}

// register my enum so that it stores the int value
jdbi.registerArgument(object : AbstractArgumentFactory(Types.TINYINT) {
override fun build(value: N, config: ConfigRegistry): Argument {
return Argument { pos, stmt, _ -> stmt.setInt(pos, value.value) }
}
})

// test with Ordinal strategy
jdbi.configure(Enums::class.java) { it.setEnumStrategy(EnumStrategy.BY_ORDINAL) }
Самая простая таблица

Код: Выделить всё

create table a(i int primary key auto_increment, n int);
Я пытаюсь извлечь данные, но получаю следующую ошибку:

Код: Выделить всё

Exception in thread "main" org.jdbi.v3.core.result.UnableToProduceResultException: no N value could be matched to the name 15

Код: Выделить всё

val dao = jdbi.onDemand(A.Dao::class.java)
val i = dao.insert(N.B)
printf(dao.select())
Я знаю, что использую AbstractArgumentFactory, и это, по моему мнению, является корнем моей проблемы. Я не думаю, что этот помощник подходит для моих нужд.
Есть ли способ зарегистрировать картограф, который делает одно при сохранении, а другое при извлечении?

Подробнее здесь: https://stackoverflow.com/questions/639 ... s-in-jdbi3
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»