java - Hibernate Fetch 不再是 Join 的子类型

标签 java hibernate jpa join fetch

我正在使用具有动态条件的 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);

关于java - Hibernate Fetch 不再是 Join 的子类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52610873/

相关文章:

java - Hibernate - @OneToMany 实体的持久集合

java - 用于插入关系的 JPA 映射

java - JPA Criteria 从一些表中选择

java - hadoop 是如何工作的?客户端如何连接到hadoop

java - 已经有关联的托管连接错误

java - 如何在 Parse.com 中的链接对象中按列获取查询顺序?

java - 如何在eclipse中安装Hibernate

JSF 2 重用 JPA 实体中定义的验证?

java - 为 HashMap 中存在的每个条目设置超时

Java - 将音频的字节数组转换为整数数组