从数据库获取列表并使用Hibernate填充Array / Hashmap

时间:2015-02-26 13:16:58

标签: java hibernate list hashmap

作为我的程序的一部分,我使用的是包含诸如用户角色,工作类别等信息的关系表。每个表可能有不同的字段 - 例如:

用户角色表包含以下字段:

  
      
  • id(自动生成)
  •   
  • 角色(例如规划师,管理员等)
  •   
  • role_description(上述角色的描述)
  •   
  • 已启用(打开/关闭此角色)
  •   

职位类别表

  
      
  • id(自动生成)
  •   
  • 类别(例如服务,维护等)
  •   
  • category_description(上述说明)
  •   
  • category_group(类别分为管理区域)
  •   
  • ...
  •   
  • 已启用(切换类别开/关)
  •   

最终用户可以更改列表,因此我需要提供一个管理部分,以便添加新的角色/类别。

我曾想过创建一个例程,我传递角色/类别的实体类等,并让它生成一个数组,可用于填充管理部分,但只能为前两列执行此操作 - 例如id / role或id / category。

每个实体之间的字段不同,有没有办法可以做到这一点?或者我是否必须在每个实体中创建一个方法 - 例如getRoleList和getCategoryList等?

感谢。

1 个答案:

答案 0 :(得分:0)

经过一些实验,我决定以下列方式实现这一点。

我已经为我的数据库助手类添加了方法,这些方法将读取列表并填充数组。我将不得不为每个实体创建一个单独的方法,但我认为由于类之间的差异,这是必要的。

我不是百分之百确定这是实现这一目标的最有效方式,但它能满足我的需求(目前)。

其中一种方法:

public static UserRole[] getUserRoleList(String order, Boolean reverseOrder) throws SQLException {
    Session session = openSession();
    List<UserRole> list;

    if (!reverseOrder) {
        // obtain list and sort by provided field in ascending order
        list = session.createCriteria(UserRole.class).addOrder(Order.asc(order)).list();
    } else {
        // sort descending
        list = session.createCriteria(UserRole.class).addOrder(Order.desc(order)).list();
    }

    // return UserRole[]
    return list.toArray((UserRole[]) Array.newInstance(UserRole.class, list.size()));
}

其余的方法几乎完全相同(替换实体/类名)。唯一的区别是为某些实体添加另一个参数(启用布尔值,因此我只能返回列表中已启用的项目。)

修改

自从发布以上内容后,我改变了主意,转而使用泛型方法来获取列表,并按如下方式传入实体类:

    public static List getList(Class entity, String order, Boolean reverseOrder, Boolean enabled) {
    // stripped for brevity...
    list = session.createCriteria(entity)
                            .add(Restrictions.eq("enabled", true))
                            .addOrder(Order.asc(order)).list();
    // stripped more...
    return list;
    }

调用方法时进行强制转换:

List<User> userList = DatabaseHelper.getList(User.class);