在我的应用程序中使用playframework
编写方法时,我需要获取Address
字段的用户输入并搜索db以查找匹配的字段。如果找不到匹配的地址,我必须创建一个新的地址。
此处只有addressLine1
和country
是必填字段。
用户可以忽略addressLine2。
从html表单中获取输入时,可选字段的textfields返回一个空字符串。因此,为了测试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");
我希望这是正确的方法。如果有人能指出更好的方法来测试这种情况,那对我有很大的帮助
地址类
@Entity
public class Address extends Model {
@Required
String addressLine1;
String addressLine2;
@Required
String country;
...
}
更新 堆栈跟踪是here
发生nullptr异常的Account.java:207就是这一行
Address address = Address.find(query).bind("addressline1",addressline1).bind("addressline2",addressline2).bind("country", country).first();
答案 0 :(得分:1)
您的查询错误。你错过了where子句中的别名和等号:
where a.addressline1 = :addressline1 ...
您构建地图的方式也是错误的。你把“clayton st”作为addressline1,然后用空字符串替换它。
如果这些更正不起作用,请编辑您的问题,粘贴异常的堆栈跟踪,并告诉我们代码中的哪一行会抛出它。