Java 对象数据库将对象作为参数传递

Java 对象数据库将对象作为参数传递,java,jpa,objectdb,Java,Jpa,Objectdb,我已经在EclipseLink中使用JSF、JPA和MySQL 5年了。我发现我想转换到objectdb,因为它非常快,特别是对于一个非常大的数据集。在迁移过程中,我发现了这个错误。 在使用EclipseLink的JPA中,我将对象作为参数传递。但是在objectdb中,我需要传递对象的id来获得结果。我必须在几个地方改变这一点。有人能帮助克服这个问题吗 这段代码在EclipseLink和MySQL中运行良好。这里我传递对象“salesRep”作为参数 String j = "select b

我已经在EclipseLink中使用JSF、JPA和MySQL 5年了。我发现我想转换到objectdb,因为它非常快,特别是对于一个非常大的数据集。在迁移过程中,我发现了这个错误。 在使用EclipseLink的JPA中,我将对象作为参数传递。但是在objectdb中,我需要传递对象的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());
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());
我必须这样做才能使它在ObjectDB中工作

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());
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());

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

在JSF应用程序中,对象在加载所有必要的引用数据之前分离,这可能会造成不同的情况

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


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

ObjectDB也应支持第一个查询。您正在使用哪个版本的ObjectDB?您是否有任何错误?另请参阅关于使用JSF从EclipseLink切换到ObjectDB的内容。感谢您指出原因。我用的是一个分离的物体。我将在搜索查询中进行修改。我喜欢ObjectDb。谢谢。下面是完整的答案和更多细节。