Мы используем QueryDSL с базой данных PostgreSQL и сначала создаем базу данных нашего домена. Наши доменные компоненты Java автоматически генерируются с использованием подключаемого модуля QueryDSL Maven версии 3.6.1.
Прежде всего, можно ли настроить плагин QueryDSL для автоматического создания перечислений Java из перечислений баз данных PostgreSQL? Например:
Когда у нас есть перечисление:
CREATE TYPE customertype AS ENUM ('person','company');
Что используется как тип столбца:
CREATE TABLE customer (customertype customertype,...
Я хотел бы, чтобы класс Java создавался как:
public class Customer {
private CustomerType customerType;
... и указанное перечисление как:
public enum CustomerType {
PERSON,
COMPANY,
}
Судя по тому, что я узнал после долгих поисков, это может быть невозможно с текущей функциональностью плагина?
В этом случае, очевидно, можно было бы определить перечисление Java вручную, а затем вручную привязать к нему столбец customertype таблиц клиентов, используя определение сопоставления типов подключаемых модулей. Вопрос в том, как это сделать? Я бы предположил, что мне придется создать класс конвертера
public class StringToCustomerType extends EnumAsObjectType<CustomerType>
и использовать его в отображении типов
<typeMapping>
<table>customer</table>
<column>customertype</column>
<type>com.example.StringToCustomerType</type>
</typeMapping>
Или есть лучший способ добиться желаемой ситуации?
Очевидно, грубый способ обойти проблему - определить stringtype = unspecified в строке подключения JDBC, определить столбец, который будет отображаться как строку, и напрямую использовать строковые значения перечислений, как при размещении значений в объекты домена. Однако это не кажется надежным решением.
Будем признательны за все предложения и советы! Спасибо!
@Enumerated(STRING)
и назовете перечисления так же, как значения базы данных. Сработает ли указание QueryDSL рассматривать перечисление как строку? - person chrylis -cautiouslyoptimistic-   schedule 20.03.2015