【问题标题】:Use Where Clause in @OneToMany JPA Collection在 @OneToMany JPA 集合中使用 Where 子句
【发布时间】:2019-03-15 07:46:05
【问题描述】:

我正在尝试使用建议的第一个解决方案 here 来实现历史记录。

在我的项目中,我们有路线、站点、孩子以及每个孩子何时到达站点的记录。

更新停止时间后,我希望记录仍与该停止相关,但使用该停止在创建时的时间。

到目前为止,我遇到的唯一问题是使用 Hibernate 时,在获取路线的停靠点时,我想忽略标记为历史的停靠点。

我可以在路由中配置@OneToMany 集合以仅使用 where 子句获取停靠点吗?

【问题讨论】:

标签: java sql hibernate jpa spring-data


【解决方案1】:

不,@OneToMany 只是表示在底层被翻译成外键等的静态实体关系,以及一些关于急切/延迟检索、更新/删除级联的提示。

您需要为您的案例创建一个@NamedQuery,它采用where 子句。它使用 JPQL,因此您仍将与您的对象模型进行交互。

由于您使用的是spring-data,因此您还可以使用存储库方法,假设您有一个RouteRepositoryStopRepository,您可以在其中为您的Route 获得非历史的Stops。

您没有包含任何代码示例,因此我无法提供更多详细信息。

【讨论】:

  • 我计划尽快迁移到 NamedQuerys 以消除整个应用程序中的急切获取。同时我找到了@Filter,你知道这是否可以用来达到同样的效果吗?
  • @FilterJoinTable 可能对您的情况有用,但它是特定于休眠的。我从未使用过它,因为通常我会避免使用非 JPA 标准的东西。如果它对您有用,请不要忘记在此处发布您的答案。
  • 干杯@jbx!我同意避免使用非标准 JPA。如果一切顺利,我会发布我的答案!
猜你喜欢
  • 2017-05-13
  • 2011-06-25
  • 2017-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-11-12
  • 1970-01-01
相关资源
最近更新 更多