【问题标题】:Invoking Entity Methods with Hibernate使用 Hibernate 调用实体方法
【发布时间】:2013-03-19 01:38:58
【问题描述】:

我在 SO 中环顾四周,但没有找到特定问题的答案。

有没有办法告诉 Hibernate 在执行查询时调用实体方法?

例如:

SELECT o.getDescription() from Order o WHERE o.id = :id

getDescription() 的实现是这样的:

public String getDescription(){
    return getFormattedOrderTime() + " " + getOrderDetails().getDescription();
}   

我知道在这个例子中这样的事情是不必要的。我创建这个例子只是为了说明我想要什么。

我只想知道查询中的调用是否完全可行,这样我就可以避免我必须做的巨大变通方法。

PS:解决方案是否特定于 Hibernate 并不重要。

附加信息:休眠版本:3.6.10.Final

【问题讨论】:

  • 你是在使用 JPA 和 Hibernate 实现还是普通的 Hibernate?
  • 我正在使用 JPA 和 Hibernate 实现,但如果你有一个解决方案,我愿意接受。我在这个项目中使用供应商特定的解决方案没有问题。
  • 好吧,假设 formattedOrderTimeorderDetails 是您实体的映射属性,您应该获取这些属性,然后调用您的 order.getDescription()
  • 是的,这是我的第一个想法。我不认为它周围有任何东西,对吧?无论如何,我会把问题留在这里,以防有人有替代方案。谢谢路易吉

标签: java hibernate jakarta-ee hql jpql


【解决方案1】:

你应该在你的@Entity 中添加一个@PostLoad 方法

@PostLoad
public String getDescriptionWithDetails(){
   return getFormattedOrderTime() + " " + getOrderDetails().getDescription();
}

【讨论】:

  • 很抱歉,这在查询执行时有效,因为documentation 将我引向另一个方向。
  • 每次加载您的订单实体时都会调用@PostLoad 方法getDescriptionWithDetails()(即从订单中选择...)
猜你喜欢
  • 1970-01-01
  • 2010-10-12
  • 1970-01-01
  • 2010-09-12
  • 1970-01-01
  • 2013-05-11
  • 2019-05-25
  • 2018-12-10
  • 1970-01-01
相关资源
最近更新 更多