[英]Hibernate Fetch is not longer sub-type of Join
我正在使用帶有動態條件的Hibernate 5.2.10,並發現Fetch不再可以分配給Join。
在下一個示例中,我需要在同一查詢中獲取組數據,但我還需要使用組的字段進行排序或限制。
CriteriaBuilder cb = session.getCriteriaBuilder();
CriteriaQuery<GroupAssignment> query = cb.createQuery(GroupAssignment.class);
Root<GroupAssignment> root = query.from(GroupAssignment.class);
SingularAttributeJoin<GroupAssignment, Group> groupFetch = (SingularAttributeJoin<GroupAssignment, Group>) root.fetch(GroupAssignment_.group, JoinType.LEFT);
query.orderBy(cb.asc(groupFetch.get(Group_.title)));
我已經手動將Fetch轉換為SingularAttributeJoin,之后,我可以使用get方法進行排序,但我正在尋找正確的方法, 如果不手動編譯我怎么做。
GroupAssignment類:
@Entity()
@Table(name = "group_assignment")
public class GroupAssignment {
@Id
@Column(name = "group_assignment_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@ManyToOne
@JoinColumn(name = "group_id", nullable = false)
private Group group;
//other fields, getters and setters
}
GroupAssignment_類:
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(GroupAssignment.class)
public abstract class GroupAssignment_ {
public static volatile SingularAttribute<GroupAssignment, Integer> id;
public static volatile SingularAttribute<GroupAssignment, Group> group;
}
小組課程:
@Entity()
@Table(name = "navigation_group")
public class Group {
@Id
@Column(name = "group_id")
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Integer id;
@Column(name = "title")
private String title;
//other fields, getters and setters
}
Group_類:
@Generated(value = "org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor")
@StaticMetamodel(Group.class)
public abstract class Group_ {
public static volatile SingularAttribute<Group, Integer> id;
public static volatile SingularAttribute<Group, String> title;
}
我認為javax.persistence.criteria.FetchParent可以解決您的問題:
FetchParent<GroupAssignment, Group> groupFetch = root.fetch(GroupAssignment_.group, JoinType.LEFT);
看來正確的方法是下一個:
query.orderBy(cb.asc(root.get(GroupAssignment_.group).get(Group_.title)));
因此,使用多次調用.get
方法,您可以根據需要盡可能深入。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.