1

Hibernateマッピングの例を調べていると、次のことがわかりました。

クラスにCollectionが含まれている場合、どこかで次のように宣言されます。

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

class Permission{
  String permissionName;
}

また

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)

これを使用するのに最適な方法と、生成されたクエリの休止状態を考慮した場合の違いは何ですか。

4

2 に答える 2

0

この場合は最初のものを使用してください。ここでは、一連のアクセス許可を持つ役割を持つことがより自然な方法です。それがあなたのビジネス上の問題だからです。役割ごとに複数の権限を持つ役割が必要です。アプリケーションの背後にあるリレーショナル データベースがなければ、2 番目のソリューションを使用することさえ考えないでしょう。これは、最初のクラス構造の分解です。

一般に、これが ORM (ここでは Hibernate) を使用する理由です。これにより、リレーショナル データベースに分解する方法を心配することなく、より便利なクラス構造を持つことができます。だから、間違いなく最初のものに行きます。

(失うもの: rolePermissions のクエリを簡単に記述できません (ただし、これは単なる「ヘルパー」クラスであり、現実世界のものをモデル化していないため、問題ではありません))

于 2012-09-26T07:08:56.397 に答える
0

permissionName両方のクラスPermissionで問題が発生しRolePermission、2 番目の方法では冗長であるため、1 番目の方法を使用します。

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
}
于 2012-09-26T07:09:00.313 に答える