Исключение при попытке использовать проекцию для объекта со свойством типа clob в данных весны - PullRequest
0 голосов
/ 18 декабря 2018

Существует объект со свойством CLOB:

@Entity
public class Person {

  @Id
  @GeneratedValue(strategy = GenerationType.AUTO)
  private long id;

  private String firstName;
  private String lastName;

  @Column(columnDefinition = "clob")
  @Lob
  private String description;

  //getters and setters here
}

Теперь я хотел бы иметь метод, который может возвращать только часть этого класса, поэтому вот класс проекции:

public interface PersonProjection {
  String getLastName();
  String getDescription();
}

и репозиторий:

@Repository
public interface PersonRepository extends PagingAndSortingRepository<Person, Long> {

  @Query(value = "select pe.last_name as lastName, pe.description from person pe where pe.last_name = :lastName", nativeQuery = true)
  List<PersonProjection> findAllByLastName(@Param("lastName") String lastName);
}

Использование собственного запроса в этом примере не требуется, но в моем случае я хотел бы вызвать функцию Oracle в предложении where (конкретный JSON_TEXTCONTAINS)).

Теперь использование этого репозитория в контроллере вызывает:

Could not write JSON: Projection type must be an interface!; nested exception is com.fasterxml.jackson.databind.JsonMappingException: Projection type must be an interface! (through reference chain: java.util.ArrayList[0]->com.sun.proxy.$Proxy103[\"description\"])

Кажется, что вызвано исключение, потому что запрос возвращает поле description как экземпляр интерфейса java.sql.Clob, но в классе проекции этополе определяется как String.Исключение не выдается, когда класс сущности используется в качестве типа возврата из метода репозитория (и там description также определяется как String).

Полный проект для проверки этой проблемы можно найти здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...