【问题标题】:Object db passing an Object as parameter将对象作为参数传递的对象数据库
【发布时间】:2018-04-17 13:02:05
【问题描述】:

我在 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(长类型)作为参数传递。

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 也应该支持第一个查询。您使用的是哪个版本的 ObjectDB?你有什么错误吗?
  • 另请参阅objectdb.com/database/issue/48,了解使用 JSF 从 EclipseLink 切换到 ObjectDB。
  • 感谢您指出原因。我正在使用一个分离的对象。我将在搜索查询中进行修改。我喜欢 ObjectDb。
  • 谢谢。现在可以在下面找到包含更多详细信息的完整答案。

标签: java jpa objectdb


【解决方案1】:

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

这可能会在 JSF 应用程序等情况下产生影响,在该应用程序中,对象在加载所有必要的引用数据之前就已分离。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-17
    • 2020-06-05
    • 2016-08-28
    • 2012-07-13
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多