是否可以将@PostLoad
与Hibernate Criteria API一起使用?例如:
@Entity
public class EntityExample {
private Integer startYear;
private Integer startPeriod;
@Transient
private String start;
@PostLoad
private void init() {
this.start = this.startYear.toString() + this.startPeriod.toString();
}
public String getStart() {
return this.start;
}
}
public class DAOExample {
public Collection<EntityExample> get(String start) {
Session session = getSession();
Criteria criteria = session.createCriteria(EntityExample.class, "entity");
criteria.add(Restrictions.ne("entity.start", start));
return criteria.list();
}
}
当我将@Formula
与Hibernate Criteria一起使用时(例如:@Formula(value = "start_year::text || start_period::text")
),它可以正常工作。但我正在尝试使用@PostLoad
'因为如果需要重构任何已包含的属性,则无需记住手动更改公式的value
。但是,使用@PostLoad
会导致org.hibernate.QueryException: could not resolve property: start of: com.entity.EntityExample
答案 0 :(得分:0)
@Transient
将属性标记为未包含在数据库表中。现在,您使用Criteria API
创建包含它的查询。这等于以下查询:
select * from EntityExample where start != 'start value'
这个也会失败,因为start
在该表中没有列。你需要为此做一个工作。在不知道用例的情况下,很难想出一个好的解决方法。最容易的就是在表格中加入start
,但我猜你有理由不立即加入