Могу ли я каким-либо образом изменить способ, которым Hibernate привязывает параметры к запросу?
Например, я хочу, чтобы hibernate использовал OracleResultSet.setFixedChar()
при выполнении в строковом столбце вместо rs.setString()
при выполнении запроса JPAчерез данные Spring.
Вот как я бы сделал это без Hibernate:
try(PreparedStatement ps = con.executeQuery("...")) {
if(ps.isWrapped(OraclePreparedStatement.class) {
ps.unwrap(OraclePreparedStatement.class).setFixedCHAR(0, myStringField);
} else {
ps.setString(0, myStringField);
}
try(ResultSet rs = ps.getResultSet()) {
while(rs.next()) {
... do stuff ...
}
}
}
Метод репозитория (Spring data JPA):
List<Object> findByMyStringField(String myStringField);
Как я могу влиятькак Hibernate связывает мою переменную.В приведенном выше примере setString
используется всегда.
В качестве фона: проблема в том, что все наши устаревшие БД используют CHAR
столбцы, а не VARCHAR2
, поэтому нам приходится иметь дело с пробелами и setFixedCHAR
должен делать именно то, что мы хотели бы.