gpt4 book ai didi

java - 对象数据库将对象作为参数传递

转载 作者:行者123 更新时间:2023-11-30 06:26:25 25 4
gpt4 key购买 nike

我使用 JSF、JPA 和 MySQL 以及 EclipseLink 已有 5 年了。我发现我想转向对象数据库,因为它非常快,特别是对于非常大的数据集。在迁移过程中,我发现了这个错误。在带有 EclipseLink 的 JPA 中,我将对象作为参数传递。但在对象数据库中,我需要传递对象的 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());

最佳答案

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

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

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

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

关于java - 对象数据库将对象作为参数传递,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47118768/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com