[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 を検索のパラメータとして扱えるため、 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 ] |
|
対応しました. |