Udo*_*eld 15 java jpa one-to-many
我们正在筑巢几个实体.但是在检索时我们只想获得那些活跃的实体.
@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;
}
Run Code Online (Sandbox Code Playgroud)
在请求时Systemproperties我只想获取属性active(active = 1).
搜索我发现了一些hibernate注释和使用子查询的可能性.然而,两者都不适合我.即使我们目前正在使用hibernate,我也在考虑用Eclipselink替换它,因为我们目前不得不使用预先加载,我们可能会遇到性能问题.子查询不能很好地工作,因为我们正在嵌套几个级别.
Eclipselink似乎有一个可以工作的@Customizer注释,但它似乎遵循与hibernate @FilterDef注释不同的概念,并且在切换时会产生额外的开销.
在@JoinColumn似乎没有允许进一步的筛选.是否有标准的JPA方法来解决这个问题?
AFAIK 没有可移植的基于 JPA 的方法来做到这一点。一个干净但有点低效的解决方案是在 Java 端做所有事情,并创建一个 getter getActiveSystemproperties(),手动迭代映射systempropertys并返回一组不可变的活动属性。
使用@Where的另一种休眠方式:
@Entity
public class System {
@Id
@Column(name = "ID")
private Integer id;
@OneToMany(mappedBy = "system")
@Where("active = true")
private Set<Systemproperty> systempropertys;
}
@Entity
public class Systemproperty {
@Id
@Column(name = "ID")
private Integer id;
@Id
@Column(name = "ACTIVE")
private Integer active;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15897 次 |
| 最近记录: |