在Hibernate中声明POJO的最佳实践

时间:2012-09-26 06:58:04

标签: java hibernate orm collections

在浏览Hibernate Mapping示例时,我发现,

当一个类包含Collection时,它被声明为

class Role{
  String roleName;
  Set<Permission> permissionName;
}

class Permission{
  String permissionName;
}

OR

class Role{
  String roleName;
}

class Permission{
  String permissionName;
}

class RolePermission{
  String roleName;
  String permissionName;
}

hbm.xml文件在两种风格上都有所不同。

两者的共同数据库表

Role
-----
role_id(PK) role_name

Permission  
-----------
permission_id(PK) permission_name

Role_Permission
-----------------
role_permission_id   role_id(FK)    permission_id(FK)

这是应该使用的最佳方式,考虑到生成的查询中的图片中的休眠,会有什么不同。

2 个答案:

答案 0 :(得分:0)

在这种情况下,请使用第一个。拥有一组权限的角色是更自然的方式。因为这就是您的业务问题所在:您希望角色对每个角色具有多种权限。 如果它不是应用程序背后的关系数据库,你甚至不会考虑使用第二个解决方案,它是对第一类结构的分解。

通常这就是你使用ORM(这里是Hibernate)的原因,这样你就可以拥有一个更方便的类结构,而不必担心如何将它分解为关系数据库。所以一定要选择第一个。

(你将失去什么:不能为rolePermissions轻松编写查询(但这不是一个问题,因为它只是一个“助手”类,它不会模拟任何现实世界的东西))

答案 1 :(得分:0)

我会使用第一种方法,因为在permissionNamePermission这两个类中你会发现RolePermission有困难,因为它在第二种方式是多余的:

class Role{
  private Integer id;
  private String roleName;
  private Set<Permission> permissionName;
  // getter setters and necessary methods
}

// use one to many relationship from Role to Permission 
class Permission{
  private Integer id;
  private String permissionName;
  // getter setters and necessary methods
}