我们嵌套了几个实体。然而,在检索时,我们只想获取那些处于 Activity 状态的实体。
@Entity
public class System {
@Id
@Column(name = "ID")
private Integer id;
@OneToMany(mappedBy = "system")
private Set<Systemproperty> systempropertys;
}
@Entity
public class Systemproperty {
@Id
@Column(name = "ID")
private Integer id;
@Id
@Column(name = "ACTIVE")
private Integer active;
}
当请求 Systemproperties
时,我只想获取 active
的属性(active = 1)。
四处搜索我发现了一些 hibernate annotations以及使用 subqueries 的可能性.但是,两者都不适合我。尽管我们目前正在使用 hibernate,但我正在考虑将其替换为 Eclipselink,因为我们目前必须使用预先加载,并且我们可能会遇到性能问题。子查询并不能很好地工作,因为我们嵌套了多个级别。
Eclipselink 似乎有一个 @Customizer可以工作的注释,但是它似乎遵循与 hibernate @FilterDef
注释不同的概念,并且在切换时会导致额外的开销。
@JoinColumn
似乎不允许进一步过滤。有没有标准的 JPA 方法来解决这个问题?
最佳答案
用 @Where 实现的另一种 hibernate 方式:
@Entity
public class System {
@Id
@Column(name = "ID")
private Integer id;
@OneToMany(mappedBy = "system")
@Where(clause = "active = true")
private Set<Systemproperty> systempropertys;
}
@Entity
public class Systemproperty {
@Id
@Column(name = "ID")
private Integer id;
@Id
@Column(name = "ACTIVE")
private Integer active;
}
关于java - JPA一对多过滤,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13306235/