作为我的程序的一部分,我使用的是包含诸如用户角色,工作类别等信息的关系表。每个表可能有不同的字段 - 例如:
用户角色表包含以下字段:
- id(自动生成)
- 角色(例如规划师,管理员等)
- role_description(上述角色的描述)
- 已启用(打开/关闭此角色)
职位类别表:
- id(自动生成)
- 类别(例如服务,维护等)
- category_description(上述说明)
- category_group(类别分为管理区域)
- ...
- 已启用(切换类别开/关)
最终用户可以更改列表,因此我需要提供一个管理部分,以便添加新的角色/类别。
我曾想过创建一个例程,我传递角色/类别的实体类等,并让它生成一个数组,可用于填充管理部分,但只能为前两列执行此操作 - 例如id / role或id / category。
每个实体之间的字段不同,有没有办法可以做到这一点?或者我是否必须在每个实体中创建一个方法 - 例如getRoleList和getCategoryList等?
感谢。
答案 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);