What is the “proper” way to cast Hibernate Query.list() to List?

后端 未结 10 1674
梦谈多话
梦谈多话 2020-12-04 11:44

I\'m a newbie with Hibernate, and I\'m writing a simple method to return a list of objects matching a specific filter. List seemed a natural return t

10条回答
  •  既然无缘
    2020-12-04 12:20

    The proper way is to use Hibernate Transformers:

    public class StudentDTO {
    private String studentName;
    private String courseDescription;
    
    public StudentDTO() { }  
    ...
    } 
    

    .

    List resultWithAliasedBean = s.createSQLQuery(
    "SELECT st.name as studentName, co.description as courseDescription " +
    "FROM Enrolment e " +
    "INNER JOIN Student st on e.studentId=st.studentId " +
    "INNER JOIN Course co on e.courseCode=co.courseCode")
    .setResultTransformer( Transformers.aliasToBean(StudentDTO.class))
    .list();
    
    StudentDTO dto =(StudentDTO) resultWithAliasedBean.get(0);
    

    Iterating througth Object[] is redundant and would have some performance penalty. Detailed information about transofrmers usage you will find here: Transformers for HQL and SQL

    If you are looking for even more simple solution you can use out-of-the-box-map-transformer:

    List iter = s.createQuery(
    "select e.student.name as studentName," +
    "       e.course.description as courseDescription" +
    "from   Enrolment as e")
    .setResultTransformer( Transformers.ALIAS_TO_ENTITY_MAP )
    .iterate();
    
    String name = (Map)(iter.next()).get("studentName");
    

提交回复
热议问题