我有一个由以下字段组成的pojo
public class tooks
{
private String bbb;
private DateTime ccc;
private String ddd;
private boolean eee = true;
}
现在我有以下sql ..
SELECT distinct u.bbb, 'Not Defined' Access_Type, u.ccc, u.ddd
FROM IOA_tooks u where u.eee='N' order by u.aaa
现在您可以看到在查询本身中创建了Access_Type列,并且上面的pojo中没有属性。请建议如何将此sql转换为hql以及需要在pojo中进行哪些更改
答案 0 :(得分:0)
这样的事情(注意,如果你想将“Y”/“N”映射到布尔类型,你必须创建一个自定义数据类型;这个例子将坚持一个字符串):
public class tooks {
private String bbb;
private DateTime ccc;
private transient String accessType = "Not Defined";
private String ddd;
private String eee = "Y";
}
我无法确切地说出你的目的,你没有提供任何其他信息,所以我只能假设你总是希望accessType为“Not Defined”。它不是数据库中的实际列,因此逻辑上不映射到对象中的任何字段。因此,只需在映射文件/注释中映射bbb,ccc,ddd和eee,并且不要将accessType映射为与数据库无关的。
Hibernate将忽略字段映射中的瞬态字段。如果您正在使用方法映射(getters / setters),则应使用JPA的@Transient注释标记getAccessType和setAccessType,Hibernate将忽略它们。
然后HQL与SQL几乎完全相同:
List<took> tooks = (List<took>)session.createQuery("select distinct t from took t where t.eee = 'N' order by t.aaa asc").list();
结果中的每个对象都有accessType ==“Not Defined”,但请注意,这不是因为它是从数据库中选择的(因为它没有被映射),它只是在Java对象中初始化的值,这似乎是成为你想要的最终结果。