Используя модуль SQL QueryDSL (без JPA / Hibernate), я использую возможность QueryDSL для генерации DTO-компонентов из соединения SQL. Я указываю setAddFullConstructor( true )
на BeanSerializer
:
MetaDataExporter beanExporter = new MetaDataExporter();
// . . .
BeanSerializer beanSerializer = new BeanSerializer();
beanSerializer.setAddFullConstructor( true );
beanSerializer.setAddToString( true );
beanExporter.setBeanSerializer( beanSerializer );
try ( Connection con = dataSource.getConnection() ) {
beanExporter.export( con.getMetaData() );
}
DTO генерируются правильно - конструктор есть - однако я обнаружил, что он не вызывается по умолчанию, если Я пишу запрос в виде:
readQueries.selectFrom( QMybean.mybean ).fetch();
Я понимаю, что могу заставить его использовать конструктор, используя один из следующих методов в классе Projections
:
public static <T> ConstructorExpression<T> constructor(Class<? extends T> type, Expression<?>... exprs)
public static <T> ConstructorExpression<T> constructor(Class<? extends T> type, Class<?>[] paramTypes, Expression<?>... exprs)
public static <T> ConstructorExpression<T> constructor(Class<? extends T> type, Class<?>[] paramTypes, ImmutableList<Expression<?>> exprs)
Но мне интересно, есть ли способ заставить его использовать сгенерированный полный конструктор автоматически, без необходимости перечисления всех параметров. Заранее спасибо.