迭代响应时,Projection Interface会引发ClassCastException

时间:2019-01-04 18:33:56

标签: hibernate spring-data-jpa spring-data hibernate-mapping spring-data-rest

我在使用投影界面时遇到问题。因为我有一个复杂的实体,该实体具有递归的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和实体C在同一包中。 您能否请某人帮助我找出问题所在或实现此目的的实际步骤是什么,目的是仅查询实体的一部分并将其映射到DTO。 先感谢您。

0 个答案:

没有答案