Код: Выделить всё
@Repository
public interface MyRepository {
@Query("SELECT sorted_children.child_1 " +
" FROM ( " +
" SELECT child AS child_1, " +
" ROW_NUMBER() OVER (PARTITION BY child.field2, child.parent.field2 " +
" ORDER BY child.parent.field1 ASC) AS rowNum " +
" FROM ChildObject child " +
" WHERE child.field1 IN (?1) AND " +
" child.parent.field1 IN (?2) " +
" ) AS sorted_children" +
" WHERE sorted_children.rowNum = 1")
Set findChildObjects(Set childField1, Set parentField1);
}
Код: Выделить всё
java.lang.ClassCastException: class org.hibernate.persister.entity.SingleTableEntityPersister cannot be cast to class org.hibernate.metamodel.mapping.EntityAssociationMapping
(org.hibernate.persister.entity.SingleTableEntityPersister and org.hibernate.metamodel.mapping.EntityAssociationMapping are in unnamed module of loader 'app')
Родитель:
Код: Выделить всё
@Entity
@Table(name = "parent_table", schema = "schema")
public class ParentObject {
@Id
@Column(name = "id")
public Long id;
@Column(name = "field1")
public Long field1;
@Column(name = "field2")
public String field2;
@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "parent_id", referencedColumnName = "id", nullable = false, insertable = false, updatable = false)
public Set children;
}
Код: Выделить всё
@Entity
@Table(name = "child_table", schema = "schema")
public class ChildObject {
@Id
@Column(name = "id")
public Long id;
@Column(name = "field1")
public Long field1;
@Column(name = "field2")
public String field2;
@ManyToOne
@JoinColumn(name = "parent_id", nullable = false, updatable = false)
public ParentObject parent;
}
Пример №1 ( не первый и не разделенный):
Код: Выделить всё
@Query("SELECT child " +
" FROM ChildObject child " +
" WHERE child.field1 IN (?1)")
Set findChildObjects(Set field1);
Код: Выделить всё
@Query("SELECT sorted_children.parent " +
" FROM ( " +
" SELECT child.parent AS parent, " +
" ROW_NUMBER() OVER (PARTITION BY child.field2, child.parent.field2 " +
" ORDER BY child.parent.field1 ASC) AS rowNum " +
" FROM ChildObject child " +
" WHERE child.field1 IN (?1) AND " +
" child.parent.field1 IN (?2) " +
" ) AS sorted_children" +
" WHERE sorted_children.rowNum = 1")
Set
findParentObjects(Set childField1, Set parentField1);
Поэтому мой вопрос:
- Что я делаю неправильно в своем исходный запрос для получения ClassCastException?
- Как добиться успешного выполнения запроса?
Подробнее здесь: https://stackoverflow.com/questions/792 ... ed-in-an-i