2017-08-29 11 views
0

私は春のブートでJPiber with Hibernateを使用しています。JPQL結合とクラスキャスト例外

私は2つの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 

} 

第二のエンティティを持っている

、私は結果を反復していたとき、私はCourseTypeRepo今

@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); 

にJPQLクエリを記述しようとしています今

@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; 



} 

、私はクラスを取得しているキャスト例外は

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

基本的には、1つのjpqlクエリを使用して完全なデータを取得しようとしています。 これはどのように修正する必要がありますか?

+0

あなたの問題を正しく理解しているかどうかわかりませんが、もし私が多分あなたが試してみるべきです:sctとしてsct.courseId IN(?1)とCoursesTypeからsctを選択してくださいsct.status =?2 – GionJh

+0

はい、動作しています.BTはすべての列を取得しません。テーブルには20個のカラムがあり、2個のカラムだけを取り出したい –

+0

\ upvoteの回答を受け入れることを忘れないでください... – Cepr0

答えて

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); 

は、トリックはあなたが持って働くようにするには質問にエイリアスを使用してください...

関連する問題