【问题标题】:JPQL Join and class cast exceptionJPQL Join 和类转换异常
【发布时间】:2017-08-29 12:50:44
【问题描述】:

我在 Spring Boot 中使用 JPA 和 Hibernate。

我有两个 jpa 实体

@Entity
@Table(name="courses_type")
public class CoursesType implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    private int id;

    @Column(name="course_id")
    private int courseId;

    @Column(name="level")
    private int level;

    private int credential;

    private String status;

    private String type;

    @Column(name="updated_by")
    private int updatedBy;

    @Column(name="updated_on")
    private Timestamp updatedOn;

    @ManyToOne(fetch=FetchType.LAZY, optional=false)
    @JoinColumn(name="credential", referencedColumnName="value_id",insertable=false,updatable=false)
    @Where(clause="status='live'")
    private BaseAttributeList credentialData;


    @ManyToOne(fetch=FetchType.LAZY, optional=false)
    @JoinColumn(name="level", referencedColumnName="value_id",insertable=false,updatable=false)
    @Where(clause="status='live'")
    private BaseAttributeList courseLevelData;

... setters and getters

}

第二个实体

@Entity
@Table(name="attribute_list")
public class AttributeList implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @Column(name="value_id")
    private int valueId;

    private String status;

    @Column(name="value_name")
    private String valueName;



}

现在我正在尝试在 CourseTypeRepo 中编写一个 JPQL 查询

@Query("Select sct.courseId, sct.credential, sct.credentialData from CoursesType"
            + " sct where sct.courseId IN(?1) and sct.status = ?2")
    List<CoursesType> getDataWithAttributes1(ArrayList<Integer> courseId, String status);

现在当我迭代结果时,我得到了类 Cast Exception

java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.domain.CoursesType

基本上我正在尝试使用一个 jpql 查询来获取完整数据。 我应该如何解决这个问题?

【问题讨论】:

  • 我不知道我是否正确理解了您的问题......但如果我理解了,也许您应该尝试: Select sct from CoursesType as sct where sct.courseId IN(?1) and sct.status = ?2
  • 是的,dat 正在工作,但我不想获取所有列。表有 20 列,我只想获取 2 列
  • 别忘了接受\upvote那些对你有帮助的答案...

标签: spring-boot spring-data-jpa


【解决方案1】:

如果不想获取完整对象,而只想获取其某些属性,则必须提供 projection 然后在查询方法中使用它,例如:

public interface PartialCoursesType {

    Integer getCourseId(), 
    Integer getCredential(), 
    BaseAttributeList getCredentialData()
}

@Query("select sct.courseId as courseId, sct.credential as credential, sct.credentialData as credentialData...")
List<PartialCoursesType> getDataWithAttributes1(ArrayList<Integer> courseId, String status);

要使技巧奏效,您必须在查询中使用别名...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-30
    • 1970-01-01
    • 2019-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多