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

Obtaining Lists from Database and Populating Array/Hashmap Using Hibernate

作为我程序的一部分,我使用关系型 table 保存用户角色、工作类别等信息。每个 table 可能有略微不同的字段 - 例如:

用户角色 Table 具有以下字段:

  • id (auto-generated)
  • role (eg Planner, Admin etc)
  • role_description (description of above role)
  • enabled (toggle this role on/off)

职位类别Table:

  • id (auto-generated)
  • category (eg Service, Maintenance etc)
  • category_description (description of above)
  • category_group (categories are grouped into management areas)
  • ...
  • enabled (toggle category on/off)

列表可以由最终用户更改,因此我需要提供一个管理部分以允许添加新的 roles/categories。

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

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

谢谢。

经过一些试验,我决定按以下方式实施。

我已将方法添加到我的数据库助手 class 中,它将读取列表并填充一个数组。我必须为每个实体创建一个单独的方法,但由于 classes.

之间的差异,我认为这是必要的

我不是 100% 确定这是完成此操作的最有效方法,但它满足了我的需要(目前)。

方法之一:

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()));
}

其余方法几乎相同(替换 entity/class 名称)。唯一的区别是为某些实体添加另一个参数(启用布尔值,因此我可以 return 仅列表中启用的项目)。

编辑:

自从发布以上内容后,我改变了主意,转而采用通用方法获取列表,传入实体 class,如下所示:

    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);