,所以我一直在这个问题上呆了大约半天,所以我想知道我是否只是过分简单的事情。
我的应用程序有三个不同的Java对象类:祖父母,父母和孩子。每个祖父母都包含父母的名单,每个父母都包含一个孩子列表。儿童拥有" Iswellbehavhav"的财产,这是布尔人。
我们正在使用弹簧数据JPA和Hibernate,以将数据映射到数据库。我们的应用程序包含许多嵌套实体和循环关系,我们依靠预测来减少请求规模。
问题:给定祖父母ID,我想返回所有父母的列表(作为预测(。我希望每个父母都包含一个儿童预测列表,但前提是孩子表现得很好。收藏中的其余孩子应从集合中滤出。
实现这一目标的最简单方法是什么?目前,我们不使用 Hibernate Filters ,我并不热衷于引入它们,因为我们不太可能在其他任何地方都需要它们(无论哪种方式,它都适合此目的吗?(。我已经使用了 JPA标准API Predicates (很少(,但发现很难适应这种特定情况。本地查询要走的方式吗?我已经开始朝这个方向发展,但是由于所有嵌套的依赖关系,遇到了一些问题,将所有字段映射到我们的春季实体,因此只想确保我什至在继续之前朝着正确的方向前进。
我(简化的(父级实体类看起来像:
@Entity
@Table(name="parent"
public class Parent {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="parent_id")
Integer id;
Integer grandparentId;
@OneToMany(mappedBy = "parent")
List<Child> children;
}
儿童课:
@Entity
@Table(name="child"
public class Child {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="child_id")
Integer id;
@ManyToOne
@JoinColumn(name="parent_id")
Parent parent;
boolean isWellBehaved;
}
父存储库接口:
@RepositoryRestResource(excerptProjection = ParentProjection.class)
public interface ParentRepository extends JpaProjectionRepository<Parent, Integer, ParentProjection> {
List<ParentProjection> findAllByGrandparent_Id(Integer grandpaId);
}
您可以在集合上使用 @Where Hibernate的注释。它会像
@Entity
@Table(name="parent"
public class Parent {
@Id @GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name="parent_id")
Integer id;
Integer grandparentId;
@Where(clause = "isWellBehaved=true")
@OneToMany(mappedBy = "parent")
List<Children> children;
}
正如您所说的:
我希望每个父母都包含一个孩子的预测列表,但前提是孩子表现良好。
List<childerns>allChilderns=parentsList.stream().map(parent>dao.findchildernByParentId()).collect(Collectors.List());
allChilderns.stream().filter(childern->childern.isWellBehaved()==true).collect(Collectors.toList());
- 让祖父母的所有父母 - 您正在做的那个。
- 一旦您得到了所有父母,每个父母findchildernbyparentid。
- 然后根据条件过滤掉childern。
让我知道:(