【发布时间】:2012-10-29 15:56:46
【问题描述】:
我们正在嵌套多个实体。但是,在检索时,我们只想获取那些处于活动状态的实体。
@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 的可能性。但是,两者都不适合我。尽管我们目前正在使用休眠,但我正在考虑用 Eclipselink 替换它,因为我们目前必须使用急切加载,而且我们可能会遇到性能问题。子查询并不能很好地工作,因为我们嵌套了几个级别。
Eclipselink 似乎有一个可以工作的@Customizer 注释,但是它似乎遵循与休眠@FilterDef 注释不同的概念,并且在切换时会导致额外的开销。
@JoinColumn 似乎不允许进一步过滤。有没有标准的 JPA 方法来解决这个问题?
【问题讨论】:
-
有点OT,但是你确定
active应该是SystempropertyID的一部分吗? -
所以@Filter 不适合你?
-
@AdamDyga 我会踢掉旧的系统属性,但这会违反一些外键。
-
@AleksandrM 我更喜欢上面提到的非休眠依赖解决方案。
-
@AleksandrM
@Filter在直接获取实体的情况下有效(例如EntityManager.find())。当您通过使用 JPA/Hibernate 映射的Set或Collection获取实体时,它不会被应用
标签: java jpa one-to-many