2015-08-17 67 views
0

我有一個類與屬性id,名稱和年齡。Spring Cache Key使用參數

我想使用ID和名稱來緩存Person對象。

我的方法是
@Cacheable(值= 「人」,鍵= 「#p.id + p.name」)
getPerson(人P)

問題是,我如何在getPerson()上使用緩存註釋...就像這樣。

+0

正是你要問?您在問題 –

+0

中編寫了註釋如何使用ID和名稱作爲我的方法getPerson()的鍵。 – user1570656

回答

0

使用註釋可以將值連接起來以創建一個鍵(我已閱讀但尚未測試過,因此調試符號可能會被刪除,因此參數應該被引用爲「p0」)。

@Cacheable(value="person", key="#p0.id.concat(‘:’).concat(#p0.name)") 

否則,它會根據Person類的equals()和hashCode(),就像如果你使用Person對象爲在地圖的關鍵同樣的方式被緩存。

因此,舉例來說:

public class Person { 
    String id; 
    String name; 
    Number age; 

    @Override 
    public int hashCode() { 
     final int prime = 31; 
     int result = 1; 
     result = prime * result + ((id == null) ? 0 : id.hashCode()); 
     result = prime * result + ((name == null) ? 0 : name.hashCode()); 
     return result; 
    } 

    @Override 
    public boolean equals(Object obj) { 
     if (this == obj) 
      return true; 
     if (obj == null) 
      return false; 
     if (!(obj instanceof Person)) 
      return false; 
     Person other = (Person) obj; 
     if (id == null) { 
      if (other.id != null) 
       return false; 
     } else if (!id.equals(other.id)) 
      return false; 
     if (name == null) { 
      if (other.name != null) 
       return false; 
     } else if (!name.equals(other.name)) 
      return false; 
     return true; 
    } 
}