2014-11-22 70 views
0

我開始學習Hibernate,並試圖從postgresql數據庫中列出實體。我有一張桌面「dbuser」。然後我有一個Dbuser類的映射。從給定字段hibernate排序的數據庫列表實體

@Entity 
@Table(name = "dbuser", schema = "public", catalog = "postgres") 
public class DbuserEntity { 
private int id; 
private String username; 
private String createdBy; 
private Date createdDate; 
private String firstName; 
private String lastName; 

@OrderBy("firstName") 
public List<DbuserEntity> dbusers = new ArrayList<DbuserEntity>(); 

//constructors 

@Id 
@SequenceGenerator(name="pk_sequence",sequenceName="entity_id_seq", allocationSize=1) 
@GeneratedValue(strategy=GenerationType.AUTO,generator="pk_sequence") 
@Column(name = "id") 
public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

@Basic 
@Column(name = "username") 
public String getUsername() { 
    return username; 
} 

public void setUsername(String username) { 
    this.username = username; 
} 

// other getters and setters, equals etc. 

然後,我有方法,一流的服務,從表中讀取所有實體:

public List readAll() { 
    HibernateUtils hibernateUtils = new HibernateUtils(); 
    Session session = null; 
    List users = new ArrayList<DbuserEntity>(); 
    try { 
     session = hibernateUtils.getSessionFactory().openSession(); 
     session.beginTransaction(); 
     users = session.createQuery("FROM DbuserEntity ").list(); 

     session.beginTransaction().commit(); 
    } catch (HibernateException e) { 
     session.beginTransaction().rollback(); 
     e.printStackTrace(); 
    } finally { 
     if (session != null) { 
      if (session.isOpen()) { 
       session.close(); 
      } 
     } 
    } 
    return users; 
} 

在main()方法,我列出的所有實體從表。我希望它按firstName排序。

 public static void main(String[] args) { 
     Service service = new Service(); 
     DbuserEntity db = new DbuserEntity(); 
     List users = new ArrayList<DbuserEntity>(); 
     users = service.readAll(); 
     db.dbusers = users; 
     for (DbuserEntity dbuser : db.dbusers) { 
     System.out.println(dbuser.toString()); 
    } 

} 
} 

而這會打印出表格中的所有dbusers。

DbuserEntity{id=19, username='user2', createdby='admin', createddate=2014-11-19, firstname='john', lastname='johnson'} 

    DbuserEntity{id=20, username='user3', createdby='admin', createddate=2014-11-19, firstname='ivan', lastname='ivanov'} 

    DbuserEntity{id=26, username='newUSer', createdby='system', createddate=2014-11-21, firstname='AAA', lastname='BBB'} 

但他們沒有排序。我不明白我做錯了什麼。我應該更改我的代碼以打印排序的實體?

+0

作爲一個方面說明,如果您沒有對語句進行更改,則不需要提交或回滾。 – Kraylog 2014-11-22 15:33:57

回答

0
createQuery("FROM DbuserEntity order by firstName").list(); 

生活可以很容易;-)

+0

非常感謝! – user2950602 2014-11-22 15:38:49

+0

請標記正確答案,以便問題可以關閉。謝謝! – geert3 2014-11-23 21:15:07

0

試試這個

public List readAll() { 
    HibernateUtils hibernateUtils = new HibernateUtils(); 
    Session session = null; 
    List users = new ArrayList<DbuserEntity>(); 
    try { 
     session = hibernateUtils.getSessionFactory().openSession(); 
     session.beginTransaction(); 
     users = session.createQuery("FROM DbuserEntity D ORDER BY D.FirstName ASC").list(); // Here I make changes 

     session.beginTransaction().commit(); 
    } catch (HibernateException e) { 
     session.beginTransaction().rollback(); 
     e.printStackTrace(); 
    } finally { 
     if (session != null) { 
      if (session.isOpen()) { 
       session.close(); 
      } 
     } 
    } 
    return users; 
} 
0

您可以使用標準建立查詢。

Criteria criteria = session.createCriteria(DbuserEntity.class).setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); 
criteria.addOrder(Order.asc("firstName")); 
List list = criteria.list(); 

session.beginTransaction().commit(); 
相關問題