java - spring data jpa 过滤 @OneToMany 中的子级

标签 java jpa java-8 spring-data-jpa


我有一个作为父实体的 EmployeeTest 实体和作为子实体的 FunGroupInfo 实体。这两个实体都由employeeId 映射。我需要一种方法来过滤掉与搜索条件匹配的子实体,以便结果仅包含父实体和子实体(满足要求)。

EmployeeTest 类:

@Entity(name = "EmployeeTbl")
public class EmployeeTest{
 @Id
 @Column(name = "emp_id")
 private String employeeId;

 @OneToMany(mappedBy= "employeeId", fetch =FetchType.Eager)
 private Set<FunGroupInfo> funGroupInfo;
}

FunGroupInfo 类:

@Entity(name = "FunGroupTbl")
public class FunGroupInfo{
 @Id
 @Column(name = "group_id")
 private String groupId;

 @Column(name = "emp_id")
 private String employeeId;

 @Column(name = "type_id")
 private String typeId;

 @Column(name = "active")
 private String activeFlag;

}

EmpRepository 接口(interface):

@Repository
public interface EmpRepository extends JpaRepository<EmployeeTest, String>{
List<EmployeeTest> findByFunGroupInfoTypeId(String typeId)
}

//inside by test method

@Autowired 
private EmpRepository  empRepository;

List<EmployeeTest> empList = empRepository.findByFunGroupInfoTypeId("2");

上面的行返回给我带有 FunGroupInfo 的列表,其中 typeId 为 1, 2, 3, 4, 5,但我需要获取唯一匹配的带有 typeId 2 信息的 FunGroupInfo

我现在得到的结果Result which i get now但我实际上只需要突出显示的和父级

最佳答案

如果您使用Hibernate,则可以使用注释@Where来过滤OneToMany关系上的元素。

示例:

  import org.hibernate.annotations.Where;
  ...
  @OneToMany(fetch = FetchType.EAGER, mappedBy = "employeeId", cascade = CascadeType.ALL)
  @Where(clause = "type_id = '2'")
  private Set<FunGroupInfo> funGroupInfo;
  ...

更多信息可咨询here .

关于java - spring data jpa 过滤 @OneToMany 中的子级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57025040/

相关文章:

java - 是否可以使用 Java 11 而不是 Java 8 运行 ionic cordova 构建?

java - 是否需要在每次查询时关闭实体管理器?

java - lombok对jpa有副作用吗

java流通过终端操作改变数据

java - 功能接口(interface)映射的正确键入 (Java 8)

java - 在接口(interface)默认方法中抛出异常

java - 试图连接到 tomcat6 : java.net.UnknownHostException 上的 mysql 服务器

java - 为什么 sun.management.OperatingSystemImpl 包可见?

java - 如何连接JPA实体类? (一对多/多对一)

java - 查找列表中的频率差异元素