2011-10-24 86 views
1

我有一個表是否可以使用@OneToMany關係在Hibernate中映射Map <String,String>?

權限

  • permission_id
  • PERMISSION_NAME
  • permission_desc

和一張桌子PermissionCategory與一對多關係Permi ssion

是否有可能以一對多的關係返回地圖而不是列表。 這是我在做什麼,現在在PermissionCategory域:

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

是否有可能有類似:

@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_idPERMISSION_NAME

請指教,謝謝。

回答

2

編號:你會如何添加一個新的權限在此地圖?

但你可以有一個Map<String, Persmission>(見http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html_single/#d0e10955),或者你可以添加特定的方法來你的實體:

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

我不能這樣做for循環解決怎麼把它會使開銷,這就是爲什麼我正在尋找一種優化的方式來做到這一點,所以談論第一種解決方案,你能告訴我什麼是字符串表示? –

+1

它代表了地圖的關鍵。它可以是Permission實體的任何String屬性,只要它對給定的類別是唯一的。按照我給你的鏈接。我懷疑循環會是一個性能問題。這些都在內存中,而每次訪問數據庫時都有內部進程或甚至網絡操作。我們在這裏談到微秒與毫秒。 –

相關問題