小编jcr*_*son的帖子

Ebean - 动态查询 - 准备语句的不匹配参数计数错误

我希望拥有比我更多Ebean专业知识的人可以帮助我解决我现在正在排除故障的不稳定问题.

环境:

  • Java 1.7.0_17
  • MySQL 5.5
  • Play Framework 2.1.1(但是我已经升级到Play 2.2.1并且这个问题仍然存在)

我的主要问题是当我重新启动Play时,我正在交替使用SQLExceptions,所有这些都与Ebean正在创建的预准备语句中的参数太多或太少有关.数据集A在数据集B失败的情况下工作一半,但在重新启动Play时,数据集B在数据集A失败时工作.

我正在根据我写入传递给函数的一组Filter对象动态构建一个Ebean Query对象.Ebean查询正在查找满足每个Filter的给定要求的所有对象.

该功能类似于:

private List<Contact> contacts getContacts(Set<Filter> filters) {
    Query<Contact> query = Contact.find;
    for (Filter filter : filters) {
        filter.apply(query);
    }
    List<Contact> contacts = query.findList();
}
Run Code Online (Sandbox Code Playgroud)

过滤器的示例:

public void apply(Query<Contact> query) {
    query.where().in("tags", getTags());
}
Run Code Online (Sandbox Code Playgroud)

首先,Ebean支持这种类型的查询构建吗?我相信这是因为大多数时候这是有效的,然而,我遇到了使用某些数据运行"getContacts"函数数百次的问题,但有时只是......

所以坚持我,因为这个问题非常令人困惑.我还将介绍数据实际上的大部分细节,但如果您需要/需要更多信息,请询问.

数据集A的查询和异常:

select distinct t0.contact_id c0, t0.contact_uuid c1, t0.bounce c2 
from contact t0
join email_record u1 on u1.contact_id = t0.contact_id 
join contact_tag u2z_ on u2z_.contact_id = t0.contact_id 
join tag u2 on u2.tag_id = …
Run Code Online (Sandbox Code Playgroud)

java mysql ebean playframework-2.0

17
推荐指数
1
解决办法
1917
查看次数

使用Java Play Framework 2.3.x在控制器中单元测试文件上载

在大部分时间工作后,我觉得我非常接近如何测试一个接受来自JUnit的文件上传的控制器方法的解决方案.我的juint测试代码如下:

Map<String, String> postData = makePostMap(uploadForm);
File file = new File("test/resources/shared/uploads/blank.csv");
TemporaryFile temporaryFile = new TemporaryFile(file);

MultipartFormData.FilePart filePath = new MultipartFormData.FilePart(
        "file",
        "file.csv",
        new scala.Some<>("text/csv"),
        temporaryFile);

List<MultipartFormData.FilePart> fileParts = Lists.newArrayList(filePath);
scala.collection.immutable.Seq files = JavaConversions.asScalaBuffer(fileParts).toList();

Map<String, scala.collection.immutable.Seq<String>> postData2 = new HashMap<>();
for (String s : postData.keySet()) {
    postData2.put(s, JavaConversions.asScalaBuffer(Lists.newArrayList(postData.get(s))).toList());
}
scala.collection.immutable.Map<String, scala.collection.immutable.Seq<String>> scalaMap =
        JavaConversions.mapAsScalaMap(postData2).toMap(Predef.<Tuple2<String, scala.collection.immutable.Seq<String>>>conforms());

MultipartFormData formData = new MultipartFormData(scalaMap, files, null, null);
AnyContentAsMultipartFormData body = new AnyContentAsMultipartFormData(formData);

// run
login(employee);
String url = routes.ManageContacts.uploadCsv().url();
FakeRequest fakeRequest = new FakeRequest(POST, …
Run Code Online (Sandbox Code Playgroud)

java junit scala playframework playframework-2.3

6
推荐指数
1
解决办法
1060
查看次数