2011-10-24 4 views
1

私がテーブルに持って@OneToMany関係で休止状態のMap <String、String>をマップすることは可能ですか?

許可:Permi に多くの関係を1とPermissionCategory

とテーブルpermission_desc

  • PERMISSION_NAME
  • をpermission_id

    • ssion

      リストの代わりに1対多の関係でマップを返すことは可能です。 は、これは私がPermissionCategoryドメインで今やっているものです:2つの文字列が permission_idある

      @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
           @JoinTable(name = "perm_cat_map", joinColumns = { @JoinColumn(name = "perm_cat_id") }, inverseJoinColumns = { @JoinColumn(name = "permission_id") }) 
           private Map<String,String> permissions = new ArrayList<String,String>(0); 
      

      PERMISSION_NAME

      @OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
          @JoinTable(name = "perm_cat_map", joinColumns = { @JoinColumn(name = "perm_cat_id") }, inverseJoinColumns = { @JoinColumn(name = "permission_id") }) 
          private List<Permission> permissions = new ArrayList<Permission>(0); 
      

      それはのようなものを持つことが可能です。

      ありがとうございました。

  • 答えて

    2

    ません:どのようにあなたはこのマップに新しい権限を追加しますか?

    しかし、あなたは(http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e10955を参照)Map<String, Persmission>を持つことができ、またはあなたのエンティティに特定のメソッドを追加することができます。なぜ

    public Map<String, String> getPermissionMap() { 
        Map<String, String> result = new HashMap<String, String>(permissions.size()); 
        for (Permission p : permissions) { 
         result.put(p.getId(), p.getName()); 
        } 
        return result; 
    } 
    
    +0

    それはオーバーヘッドを行いますだって私はループ解決のために行うことができない、というのです私はそれを行う最適化された方法を探しているので、最初のソリューションについて話して、文字列が何を表しているか教えてください。 –

    +1

    マップのキーを表します。 Permissionエンティティの任意のStringプロパティであっても、指定されたカテゴリに対して一意である必要があります。私があなたに与えたリンクに従ってください。ループがパフォーマンスの問題になるのではないかと思う。すべてがメモリに格納されていますが、データベースにアクセスするたびにプロセス間またはネットワーク操作さえあります。ここではマイクロ秒とミリ秒を話しています。 –