2017-08-02 113 views
0

我目前正在转换文件冬眠的.hbm.xml来注释和有非常相似的这个 Adding a calculated field on jpa + jackson休眠/ JPA添加计算领域

我有一些领域,包括FIRST_NAME和姓氏一个数据库表中的问题,所以这个领域应该是持久的(这符合预期)。

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

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

而且我不知道我要补充的方法,该方法的注释? (试过@Transient,@Formula,@Basic,@Column,全名......不应该是持久的)

的问题是,我用全名来创建一个订单

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(); 
} 

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

我目前的'解决方案'是

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

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

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

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

回答

0

如果fullName不是持久性,那么你应该使用@Transient,而不是javax.persistence之一。

另外,把 @Formula("concat(first_name,' ',last_name)")getFullName并删除 getName - >这实际上是不正确的,@Transient和@Formula不在一起工作得很好。

就像在评论中说的,你可以创建自己的订单来添加到标准api。

+0

谢谢你的回答,实际上fullName只有'exists'作为这个吸气,所以没有字段('name'应该是什么意思fullName只是我加的,因为它没有工作没有) 我总是得到一个“无法解决属性:fullName”错误:/ 与名称和姓氏在超类中的事实有什么关系? –

+0

我明白了fullName是如何存在的,而这正是重点。 你也可以尝试的方法是将@Transient(验证它是否是正确的)以任何方式放置,并保留在第一个代码中,并简单地创建一个新的顺序,检查https://stackoverflow.com/questions/31281162 /如何以订单结果为基础的基于hibernate的订单,正确的答案显示了如何创建自己的订单。 –

+0

它工作(在我的项目中进行了一些小的重构之后),非常感谢! –