2013-08-05 3 views
0

У меня есть POJO состоят из следующих пологодобавление столбца dynically, а затем преобразовать его в HQL

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

Боюсь, я не понимаю. Запрос HQL может привести только к объектам с отображением Hibernate, и я не вижу объектов в вашем фрагменте, которые могут быть сопоставлены с выписанным оператором SQL. Можете ли вы опубликовать объект сущности, на который вы собираетесь сопоставить результаты этого запроса? –

+0

Объект @entity, означает отображение hbm –

+0

Я просто хотел преобразовать этот sql в hql, что все, кроме одного столбца, не определены my pojo –

ответ

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 будет игнорировать переходные поля в полевом сопоставлении. Если вы используете сопоставление методов (getters/seters), вы должны пометить getAccessType и setAccessType с аннотацией @Transient JPA, а 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 == «Не определено», но обратите внимание, что это не потому, что он был выбран из базы данных (поскольку он не отображается), это просто значение, которое было инициализировано в объекте Java, что, по-видимому, является конечным результатом, который вы делали.

Смежные вопросы