0

我有一个 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中需要进行哪些更改

4

1 回答 1

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 为“未定义”。它不是数据库中的实际列,因此逻辑上不会映射到对象中的任何字段。因此,只需在映射文件/注解中映射 bbb、ccc、ddd 和 eee,不要映射 accessType,因为它与数据库无关。

Hibernate 将忽略字段映射中的瞬态字段。如果您使用方法映射(getter/setter),您应该使用 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 对象中初始化的值,这似乎是你想要的最终结果。

于 2013-08-05T04:32:55.503 回答