对象db传递Object作为参数

时间:2017-11-05 06:17:27

标签: java jpa objectdb

我在EclipseLink上使用JSF,JPA和MySQL已有5年了。我发现我想转移到Object db,因为它非常快,特别是对于非常大的数据集。在迁移过程中,我发现了这个错误。 在带有EclipseLink的JPA中,我将对象作为参数传递。但是在Object DB中,我需要传递对象的id来获得结果。我必须在几个地方改变它。能够帮助克服这个问题。

这些代码在EclipseLink和MySQL上运行良好。在这里,我将对象“salesRep”作为参数传递。

String j = "select b from "
            + " Bill b "
            + " where b.billCategory=:cat "
            + " and b.billType=:type "
            + " and b.salesRep=:rep ";
    Map m = new HashMap();
    m.put("cat", BillCategory.Loading);
    m.put("type", BillType.Billed_Bill);
    m.put("rep", getWebUserController().getLoggedUser());

我必须像这样使它在ObjectDB中工作。我必须将对象“salesRep”的id(类型long)作为参数传递。

String j = "select b from "
            + " Bill b "
            + " where b.billCategory=:cat "
            + " and b.billType=:type "
            + " and b.salesRep.id=:rep ";
    Map m = new HashMap();
    m.put("cat", BillCategory.Loading);
    m.put("type", BillType.Billed_Bill);
    m.put("rep", getWebUserController().getLoggedUser().getId());

1 个答案:

答案 0 :(得分:1)

在处理分离的实体对象时,EclipseLink和ObjectDB之间存在差异。 ObjectDB的默认行为是遵循JPA规范,并在对象分离后通过字段访问(透明导航)停止加载引用的对象。 EclipseLink不会以这种方式处理分离的对象。

这可能会在JSF应用程序中产生影响,在加载所有必需的引用数据之前,对象会被分离。

一种解决方案(JPA可移植方式)是确保在对象分离之前加载所有必需的数据。

另一种可能的解决方案是通过设置objectdb.temp.no-detach系统属性,通过访问(透明导航)为分离的对象启用加载引用的对象。请参阅this forum thread中的#3。