Есть много вещей, которые не подходят к вашему подходу.
Рискованные SQL-инъекции
То, как вы строите SQL с использованием конкатенации строк, очень рискованно и может подвергнуть ваше приложение воздействию SQL-инъекций .
StringBuilder sql = new StringBuilder();
sql.append(" SELECT id as id, localDateColumn as date, ");
sql.append(" FROM t");
Query query = entityManager.createNativeQuery(sql.toString());
Более того, это даже неправильно, поскольку вы добавляете ,
перед предложением FROM
. Вам нужно использовать Criteria API , если вы хотите динамически создавать запросы.
Псевдонимы используются неправильно
Вы задаете для столбца localDateColumn
псевдоним date
следующим образом:
sql.append(" SELECT id as id, localDateColumn as date, ");
Но затем вы используете localDateColumn
при настройке Типа гибернации с помощью addScalar
:
.addScalar("localDateColumn", DateType.INSTANCE)
Теперь, согласно заголовку вашего вопроса, если localDateColumn
- это тип столбца MySQL DATE
, и вы хотите сопоставить его с LocalDate
Java-объектом, вы должны сделать это так:
.addScalar("date", LocalDateType.INSTANCE)