Интерфейс проекции выбрасывает ClassCastException при повторении ответа - PullRequest
0 голосов
/ 04 января 2019

У меня проблема с использованием интерфейса проекции. Как у меня есть сложная сущность, которая имеет рекурсивные отображения 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. Заранее спасибо.

...