を使用するアプリでメソッドを作成しているときに、フィールドplayframework
のユーザー入力を取得Address
し、データベースで一致するものを検索する必要があります。一致するアドレスが見つからない場合は、新しいアドレスを作成する必要があります。
ここではaddressLine1
とのみcountry
が必須フィールドです。ユーザーは addressLine2 を無視できます。
HTMLフォームから入力を取得している間、オプションフィールドのテキストフィールドは空の文字列を返します。そのため、 Address の作成をテストするためMap<String,String>
に、メソッドに渡されるを作成することにしましたPOST
..
addrparams = new Map<String,String>();
addrparams.put("addressline1","clayton st");
addrparams.put("country","US");
これにより、jpql クエリが不足しているオプション フィールドのマップから値をバインドしようとしたときに、nullpointer 例外が発生しました。
String query="select distinct a from Address a where a.addressLine1=:addressline1 and a.addressLine2=:addressline2 and a.country=:country";
Address address = Address.find(query).bind("addressline1",addressline1).bind("addressline2",addressline2).bind("country", country).first();
..
すべてのオプションフィールドに空の文字列を入れることでこれを解決しました
addrparams = new Map<String,String>();
addrparams.put("addressline1","clayton st");
addrparams.put("addressline2","");
addrparams.put("country","US");
これがこれを行う正しい方法であることを願っています..誰かがそのような状況をテストする際のより良いアプローチを指摘できれば、それは私を大いに助けるでしょう.
Address クラス
@Entity
public class Address extends Model {
@Required
String addressLine1;
String addressLine2;
@Required
String country;
...
}
更新: スタックトレースはこちら
nullptr 例外が発生する Account.java:207 は、この行です
Address address = Address.find(query).bind("addressline1",addressline1).bind("addressline2",addressline2).bind("country", country).first();