2016-11-21 17 views
2

を@BindBean使用した場合の特性を無視する方法:私はこの単純なクエリでJDBIを使用してい

@SqlQuery("SELECT id FROM myTable WHERE value = :bean.one") 
int search(@BindBean("bean") MyBean bean); 

public class Bean { 
    String one; 
    String two; 
    public String getTwo() { throw new IllegalStateException(); } 
    // other methods omitted 
} 

のみoneプロパティは、クエリで使用されているので、私はこれが正常に動作するよう期待します。残念ながら、デフォルトのBeanマッパーはまず、Beanからすべてのプロパティーを収集し、後でそれらをクエリーで満たします。

JDBIにBeanプロパティまたはメソッドを無視して呼び出さないように指示できますか?

答えて

1

これは、v2のバグ(または少なくともペーパーカット)とみなされます。固定したい場合は、report it to the teamとしてください。

回避策として、Query.bindFromProperties(bean)はクエリに含まれないプロパティを無視します。あなたは、コンクリート/デフォルトの方法として、あなたのSQLメソッドを書き換える場合:

interface MyDao extends GetHandle { 
    default int search(MyBean bean) { 
    return getHandle().createQuery(
      "SELECT id FROM myTable WHERE value = :bean.one") 
     .bindFromProperties(bean) 
     .mapTo(int.class) 
     .first(); 
    } 
} 

これは、何が価値があるため、最新のv3のアルファで修正されています。

関連する問題