Hibernate / JPA添加一个计算字段

时间:2017-08-02 07:59:36

标签: java hibernate jpa hibernate-mapping hibernate-annotations

我目前正在将hibernate .hbm.xml文件转换为注释,但问题非常类似于此 Adding a calculated field on jpa + jackson

我的数据库表包含一些字段,包括first_name和last_name,因此这些字段应该是持久的(这可以按预期工作)。

但现在我有一个getFullName()方法

  // ?????
public String getFullName() {
   return getFirstName() + " " + getLastName();
}

而且我不知道我应该在方法中添加哪个注释? (试过@Transient,@ Formula,@ Basic,@ Column,.... fullName不应该是持久性的)

问题是我使用fullName创建订单

Order.asc("fullName");

然后在方法

中使用它
public List<Student> findAll(Session session, Order order) {
  Criteria crit = session.createCriteria(Student.class);
  if (null != order) {
    crit.addOrder(order);
  }
  return crit.list();
}

............................................... ..........

我目前的解决方案&#39;是

 @Formula("concat(first_name,' ',last_name)")
 private String name;

 @Override
 public String getFullName() {
   return getFirstName() + " " + getLastName();
 }

但这是多余的,而不是我想要的。

最后我想使用最新的Hibernate版本。

1 个答案:

答案 0 :(得分:0)

如果@Transient不是持久性,那么您应该使用javax.persistence,而使用@Formula("concat(first_name,' ',last_name)")

此外,将getFullName放在getName上,然后移除{{1}} - &gt;这实际上是不正确的,因为@Transient和@Formula不能很好地协同工作。

如评论中所述,您可以创建自己的订单以添加到条件api。