问题标签 [datanucleus]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1187 浏览

gwt - Datanucleus JDO 检索新生成的主键

我在 GWT 项目中使用 datanucleus 和 jdo。使用 makePersistent() 将元素添加到数据库后如何检索生成的主键

编辑 我们使用注解,这里是主键:

我不是做映射的人,我还没有得到所有这些。

0 投票
2 回答
887 浏览

java - Appengine 数据存储幻象实体 - 不一致的状态?

在过去可以正常工作的 java appengine 代码上出现一个奇怪的错误(除了数据存储中的数据没有任何变化)。

我正在尝试迭代查询结果并更改实体的一些属性。该查询确实返回了一组结果,但是,当我尝试访问列表中的第一个结果时,它会在尝试访问其任何属性(但它的键)时引发异常。这是一个例外:

这是我的代码:

代码在尝试执行 c.setOpen(false) 时引发异常 - 这是我第一次访问或设置不是键的属性。因此,我的数据存储中似乎有一个虚拟实体,密钥为 3204258。这个实体并不真正存在(从管理控制台查询数据存储),但由于某种原因,它被查询返回。我的数据存储可能处于不一致的状态吗?

我通过将它作为我的 for 循环中的第一行来管理以下解决方法。显然是一个丑陋的黑客:

if (c.getOnTheCanId() == 3204258) { 继续; }

有任何想法吗?

0 投票
1 回答
450 浏览

java - AppEngine 开发环境给出 java.lang.VerifyError

当我在 Eclipse 开发环境中运行我的应用程序时出现以下错误,但是当我将应用程序部署到应用程序引擎时它工作正常。是否有可能在开发环境中完成这项工作?

0 投票
2 回答
1769 浏览

jdo - 避免 DataNucleus 连接?

我正在尝试将 JDBC webapp 移动到 JDO DataNucleus 2.1.1。

假设我有一些看起来像这样的类:

公共类位置{私人整数ID;私有字符串标题;}

公共类员工{私人整数ID;私有字符串名称;私人职位职位;}

Position SQL 表的内容确实不会经常更改。使用 JDBC,我将整个表读入内存(能够定期或随意刷新)。然后,当我将 Employee 读入内存时,我只需从 Employee 表中检索职位 ID 并使用它来获取内存中的 Position 实例。

但是,使用 DataNucleus,如果我遍历所有位置:

然后稍后,使用不同的 PersistenceManager 遍历所有员工,获得他们的职位:

然后,当我获得 Employee's Position 时,DataNucleus 似乎会生成连接两个表的 SQL:

选择 A0.POSITION_ID,B0.ID,B0.TITLE 从 MYSCHEMA.EMPLOYEE A0 LEFT OUTER JOIN MYSCHEMA."POSITION" B0 ON A0.POSITION_ID = B0.ID WHERE A0.ID = <1>

我的理解是,DataNucleus 将在可用时使用缓存的 Position 实例。(对吗?)但是,我担心连接会降低性能。我还远远不够运行基准测试。我的恐惧是不是错位了?我应该继续并进行基准测试吗?有没有办法让 DataNucleus 避免加入?

我想我希望能够做的是告诉 DataNucleus 继续读取 POSITION_ID int 作为默认提取组的一部分,并查看相应的 Position 是否已被缓存。如果是这样,则设置该字段。如果没有,则稍后再加入,如果需要的话。更好的是,继续将该 int ID 存储在某处,并在稍后调用 getPosition() 时使用它。这将避免在所有情况下加入。

我认为知道类和主键值就足以避免幼稚的情况,但我对 DataNucleus 的了解还不够。


有了收到的有用反馈,我的 .jdo 现已清理完毕。但是,在将 POSITION_ID 字段添加到默认提取组后,我仍然得到一个加入。

我理解它为什么这样做,天真的方法总是有效的。我只是希望它能够做得更多。尽管 DataNucleus 可能不会从结果集中读取所有列,而是返回缓存的位置,但它仍然调用数据存储来访问第二个表,包括可能的磁盘查找和读取。它会抛弃这项工作的事实并没有什么安慰。

我希望做的是告诉 DataNucleus 所有位置都将被缓存,相信我。如果由于某种原因你找到了一个不是,请怪我缓存未命中。我了解您必须(透明地)在职位表上执行单独的选择。(更好的是,固定由于缓存未命中而必须获取的任何位置。这样就不会再次在对象上发生缓存未命中。)

这就是我现在通过 DAO 使用 JDBC 所做的事情。研究持久层的原因之一是放弃这些 DAO。很难想象迁移到无法超越原始获取的持久层会导致昂贵的连接。

只要 Employee 不仅有一个职位,而且有一个部门和其他字段,一个 Employee 提取会导致访问六个表,即使所有这些对象都已经固定在缓存中,并且可以根据它们的类和首要的关键。事实上,我可以自己实现这一点,将 Employee.position 更改为 Integer,创建 IntIdentity,并将其传递给 PersistenceManager.getObjectByID()。

我想我听到的是 DataNucleus 无法进行这种优化。那正确吗?很好,只是不是我所期望的。

0 投票
1 回答
482 浏览

google-app-engine - Datanucleus/Roo/GWT - 使用日期字段持久化 bean 的问题

我尝试运行示例 GWT/Google Appengine 应用程序 - ROO 使用 roo 命令“script costs.roo”生成的费用(如此处所建议那样)...

此应用程序使用 datanucleus-core - 1.1.6 和 HSQLDB 作为内存数据库。

我能够运行应用程序并成功存储和检索 Employee 对象。(这些 Employee 对象没有任何日期类型字段,而只有字符串和 int 字段)。

但我在存储“报告”对象时遇到问题,应用程序打印错误消息“意外的服务器错误”。查看日志和调试,由于尝试将 null 存储在非 null 日期类型字段(“已创建”日期字段)中而发生此意外错误

这就是复杂的地方...查看此 Report 类的源代码,“创建”日期字段未指定为“非空”字段(缺少 @notnull 注释)。为了确认这一点,我将数据库更改为 Postgresql 并检查了自动生成的模式,发现这个日期字段确实被标记为“非空”。

这意味着自动模式生成期间的 DataNucleus 始终将日期字段标记为“非空”。

我通过将 ORM 库更改为 Hibernate 进一步证实了这一点,相同的代码没有任何问题,并且能够在 HSQL 和 Postgres DB 中保存带有日期字段的报表对象。

它是 DataNucleus 的一个错误吗?还有其他人看到这个问题吗?

0 投票
2 回答
1192 浏览

google-app-engine - 使用 maven 的 Google App Engine

我一直在尝试在单个 maven 文件夹结构下创建一个可以在 sql 和 gae 上运行的单个项目(需要更改 'datanucleus.properties' 文件)。我首先尝试使用 mysql 在 GAE 网站上获取 Greeting 示例(现在可以使用)。然后,从 beardedgeeks 教程中启发自己,我尝试添加所需的依赖项,以便在 gae 上运行这些东西。但是,通过输入 mvn gae:run,我收到以下错误,发布在http://pastebin.com/fJ7c7xfx上。我花了很多时间在谷歌等搜索答案,但一直无法推进我的案子。

我很高兴得到一些指示。干杯,马诺乔

0 投票
1 回答
911 浏览

jdo - 未在 DataNucleus 中设置准备好的语句参数

我正在尝试使用 DataNucleus 2.1.1 将 Employee 对象插入数据库,但在执行“插入”准备语句之前未设置外键位置参数。我在做什么阻止设置参数?我是不是遗漏了什么?阅读效果很好。

0 投票
1 回答
1126 浏览

gwt - “org.datanucleus”已经在 Spring Source Toosuite 下注册

线程“main”插件(Bundle)“org.datanucleus”中的异常已注册。确保类路径中没有同一个插件的多个 JAR 版本。URL“file:/home/zakaria/.m2/repository/org/datanucleus/datanucleus-core/1.1.6/datanucleus-core-1.1.6.jar”已注册,您正在尝试注册相同的插件位于 URL “file:/home/zakaria/springsource/sts-2.3.3.M2/plugins/com.google.appengine.eclipse.sdkbundle.1.3.5_1.3.5.v201007021040/appengine-java-sdk-1.3.5 /lib/user/orm/datanucleus-core-1.1.5.jar。” org.datanucleus.exceptions.NucleusException:插件(捆绑)“org.datanucleus”已注册。确保类路径中没有同一个插件的多个 JAR 版本。URL“文件:/home/zakaria/.

你能帮我吗?我试图在内置的 Roo Shell 中重新输入以下命令,但没有办法:

谢谢,

问候。

0 投票
1 回答
257 浏览

java - DataNucleus 和缓存协调

DataNucleus 是否支持缓存协调?如果是,我该如何启用和使用它?

我还没有积极使用 DataNucleus,但我想考虑一下,如果它支持缓存协调。

背景:多个缓存实例使用缓存协调来相互通知更改的实体(例如通过 JMS 或 RMI)。其目的是减少失败或重复事务的数量(类似于 EclipseLink提供的?)

0 投票
2 回答
2031 浏览

java - 在 JDO 查询中忽略大小写

我想从数据库中选择一个结果列表,但==JDO 查询的运算符区分大小写。有没有办法使用单个参数从表中选择“USER”、“user”和“User”?

在 MySQL 中有LIKE操作符,在 Java 中有equalsIgnoreCase函数。但是,它们在本示例中均不起作用。