在我的POJO中我有这个:
@Transient
private int qtyMentee;
在我的DAO中我有这个问题:
public List<Employee> findQtyMentee(){
TypedQuery<Employee> query = (TypedQuery<Employee>) em.createNativeQuery(
"select *, count(mentor_id) as qtymentee from employee group by id order by qtymentee asc" , Employee.class);
Collection<Employee> employee = (Collection<Employee>) query.getResultList();
return (List<Employee>) employee;
}
当我试图让Qtymentee永远返回0.
注释@Transient
在这种情况下是错误的吗?
如何获取此值并在我的应用程序中显示?
OBS:我正在使用Eclipselink。
感谢。
答案 0 :(得分:2)
答案 1 :(得分:0)
@Transient
基本上意味着do not serialize me
。因此@Transient
会阻止您的字段被保留。你应该删除它。
答案 2 :(得分:0)
不支持您尝试做的事情。瞬态意味着它不是由JPA以任何方式映射或处理的字段 - 它被排除在数据库之外被读取或持久化。在这种情况下,您试图将计算数据推送到实体字段,这将破坏由上下文维护的实体的缓存。
希望您已将此映射为对象模型中的1:M(Say employee.mentees)和M:1(比如employee.mentor)。如果是这样,集合映射上的简单大小将返回&#34; mentee&#34; s的数量,而不需要在某处存储值。
如果您希望使用JPQL(而不是带有createNativeQuery方法的SQL)直接返回值排序的列表:
List<Object[]> list = createQuery("Select e, size(e.mentees) as qtymentee from Employee e order by qtymentee asc").getResultList();
如果您还没有使用引用映射映射mentor_id字段,则需要使用子查询,因为我不相信您发布的SQL查询会起作用。
如果必须将其放入数据对象,可以使用此处描述的构造函数表达式http://docs.oracle.com/cd/E15523_01/apirefs.1111/e13946/ejb3_langref.html#ejb3_langref_constructor
看起来像是:
createQuery("select new DAO(e.id, e.otherfield .., size(e.mentees)) from Employee e")