Как обрабатывать ClassCastException при попытке привести CLOB к строке в Java?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как обрабатывать ClassCastException при попытке привести CLOB к строке в Java?

Сообщение Anonymous »

Я поддерживаю приложение Java, использующее Hibernate 5.0.7 для взаимодействия с базой данных Oracle 19C. Тип данных атрибута примечания в таблице Orders — CLOB, java.lang.ClassCastException: com.org.proxy.$Proxy157 не может быть приведен к java.lang.String, выдается при выполнении dto.setRemark((String) obj[0]). Псевдокоды показаны разбросом.

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

@Entity
@Table(name=“orders”)
public class Order {
……other fields
@Lob
@Column
private String remark;
……getters & setters
}

public class OrderDto {
……other fields
private String remark;
……getters & setters
}

public List getOrderDto() {
List dtos = new ArrayList();
Query query = entityManager.createNativeQuery(“SELECT remark, ……other fields FROM orders”);
List resultList = query.getResultList();
if(!resultList.isEmpty()) {
for(Object[] obj : resultList) {
OrderDto dto = new OrderDto();
dto.setRemark((String) obj[0]);
……
dtos.add(dto);
}
}
return dtos;
}
Показанный ниже подход предложен По.

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

public List getOrderDto() {
List dtos = new ArrayList();
Query query = entityManager.createNativeQuery("SELECT remark, ...other fields FROM orders");
List resultList = query.getResultList();
if(!resultList.isEmpty()) {
for(Object[] obj : resultList) {
OrderDto dto = new OrderDto();
if(obj[0] instanceof java.sql.Clob) {
java.sql.Clob clob = (java.sql.Clob) obj[0];
StringBuilder sb = new StringBuilder();
try(BufferedReader reader = new BufferedReader(clob.getCharacterStream())) {
String line = null;
while((line = reader.readLine()) != null) {
sb.append(line);
}
} catch(IOException e) {
e.printStackTrace();
}
dto.setRemark(sb.toString());
}
……
dtos.add(dto);
}
}
return dtos;
}
Я не могу оценить, хорош этот подход или нет. Предоставляет ли Hibernate какие-либо встроенные API для решения этой проблемы?

Подробнее здесь: https://stackoverflow.com/questions/798 ... ng-in-java
Ответить

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

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

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

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

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