0

在我的应用程序中编写使用的方法时playframework,我需要获取用户输入的Address字段并在 db 中搜索匹配的地址。如果找不到匹配的地址,我必须创建一个新地址。

这里只有addressLine1country是必填字段。用户可以忽略 addressLine2。

在从 html 表单中获取输入时,可选字段的文本字段返回一个空字符串。所以,为了测试地址的创建,我决定创建一个Map<String,String>传递给该POST方法。我试过了

addrparams = new Map<String,String>();
addrparams.put("addressline1","clayton st");
addrparams.put("country","US");

当 jpql 查询尝试为缺少的选项字段绑定映射值时,这会导致空指针异常。

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;
...
} 

更新: 堆栈跟踪在这里

发生nullptr异常的Account.java:207,是这一行

Address address = Address.find(query).bind("addressline1",addressline1).bind("addressline2",addressline2).bind("country", country).first();
4

1 回答 1

1

你的查询是错误的。您错过了 where 子句中的别名和等号:

where a.addressline1 = :addressline1 ...

您构建地图的方式也是错误的。您将“clayton st”作为 addressline1,然后将其替换为空字符串。

如果这些更正不起作用,请编辑您的问题,粘贴异常的堆栈跟踪,并告诉我们代码中的哪一行抛出异常。

于 2011-09-30T06:43:00.277 回答