[CONTAINER-393] [S2JDBC] PropertyNameをプロパティ名として文字列などとも比較できるようにしました. Created: 2009-10-02  Updated: 2009-10-02  Resolved: 2009-10-02

Status: Resolved
Project: S2Container
Component/s: S2JDBC
Affects Version/s: 2.4.39
Fix Version/s: 2.4.40

Type: Improvement Priority: Major
Reporter: shinsuke Assignee: koichik
Resolution: Fixed Votes: 0
Labels: None


 Description   

プロパティ名をあらわすクラスである PropertyName において、
同じプロパティ名を表すインスタンスが等しくなりません。

たとえば、

PropertyName<String> p1 = new PropertyName<String>("value");
PropertyName<String> p2 = new PropertyName<String>("value");

で p1.equals(p2) は false になります(PropertyName が equals() を実装していないため)。

jdbcManager が Map を検索のパラメータとして扱えるため、
Dto を作らずに以下のように ActionForm から Map を作り、
必要な個所をタイプセーフ API で置き換えて検索実行を
する場合があります。

public class XxxxForm {
  public String xxxCd;
}

public class XxxxAction {
  :
  public String index() {
    :
    Map<CharSequence, Object> param = new HashMap<CharSequence, Object>();
    BeanUtil.copyProperties(xxxxForm, param);
    param.put(table1().xxxCd(), "新しい値"); // xxxCd() はタイプセーフAPI
    // xxxxForm.xxxCd の値とtable1().xxxCd()が別物として格納されます

    jdbcManager.selectBySqlFile(Yyy.class, "hoge.sql", param).getResultList();
    :

上記のケースではどちらの値が適用されるかわからず、
予期しない結果を得ることも考えられます。

ですので、PropertyName に equals を実装することで
等しいプロパティを判別することができ、文字列の
プロパティ名とも等しいかどうかを判別できると
良いと考えいます。

以下のような修正をイメージしています。

Index: src/main/java/org/seasar/extension/jdbc/name/PropertyName.java
===================================================================
--- src/main/java/org/seasar/extension/jdbc/name/PropertyName.java	(revision 4372)
+++ src/main/java/org/seasar/extension/jdbc/name/PropertyName.java	(working copy)
@@ -85,4 +85,19 @@
         return name;
     }
 
+    @Override
+    public boolean equals(Object obj) {
+        if(this == obj) {
+            return true;
+        }
+        if(obj instanceof PropertyName<?>){
+            return name.equals(obj.toString());
+        }
+        return name.equals(obj);
+    }
+
+    @Override
+    public int hashCode() {
+        return name.hashCode();
+    }
 }


 Comments   
Comment by koichik [ 2009-10-02 ]

対応しました.
http://www.seasar.org/source/changelog/s2container/?cs=4388

Generated at Fri Mar 29 04:49:51 JST 2024 using Jira 9.13.0#9130001-sha1:94297e63fec900085df7b42441d17146fe025bb5.