У меня проблема с использованием интерфейса проекции. Как у меня есть сложная сущность, которая имеет рекурсивные отображения OneToMany. Так что это влияло на производительность запроса. Поэтому я пытаюсь получить только необходимые поля из БД и сопоставить их с DTO.
Нельзя использовать отображение конструктора, поскольку оно не поддерживает рекурсивные значения. Поэтому предпочтительнее использовать интерфейс проекции.
@Entity
@Table(name = "cons")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class C implements Serializable {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@ManyToOne
@JoinColumn(name = "o_id")
private O o;
}
@Entity
@Table(name = "o")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class O implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
private Long id;
@Column(name = "o_name")
private String oName;
}
public interface CustomCRepository extends CrudRepository<C, Long> {
@Query("select c.id,o.id" +
" from C c LEFT JOIN c.o o LEFT JOIN " +
" where c.cId IN (:cIds)")
public List<CInfoInterface> findAllByConsignmentIdIn(@Param("cIds")
List<String> cId);
}
public interface CInfoInterface {
public Long getId();
public OSummary getOs();
public interface OrdersSummary{
public String getOId();
}
}
Когда я пытаюсь получить доступ к результату запроса с помощью следующего кода, он выдает исключение classCastException (вызванное: java.lang.ClassCastException: [Ljava.lang.Object; не может быть приведено к CInfoInterface).
CInfoInterface и Entity C находятся в одном пакете.
Не могли бы вы, пожалуйста, кто-нибудь помочь мне определить, что здесь не так или каковы фактические шаги для достижения этого. Цель состоит в том, чтобы запросить только подмножество сущностей и сопоставить их с DTO.
Заранее спасибо.