Datanucleus/JDO,持久化和检索java.util.Set属性

Datanucleus/JDO,持久化和检索java.util.Set属性,jdo,datanucleus,Jdo,Datanucleus,我在我的持久类中设置了一个类型为的属性。我坚持使用H2数据库。该类正确地存在,我可以使用H2控制台查看数据,并查看Set属性是否已被序列化以用于存储,在我尝试检索该对象之前,这是正常的,我的属性始终为null。我尝试添加注释来停止序列化,并将其添加到默认的获取组,但没有成功。我想我真的不明白我需要添加哪些来阻止它被序列化。我并不在乎它是否被序列化,只要我能重建集合并访问它的成员 有人能给我举一个简单的例子,说明使用Datanucleus(带或不带序列化)持久化集合,以及反序列化数据所需的任何特殊

我在我的持久类中设置了一个类型为的属性。我坚持使用H2数据库。该类正确地存在,我可以使用H2控制台查看数据,并查看Set属性是否已被序列化以用于存储,在我尝试检索该对象之前,这是正常的,我的属性始终为null。我尝试添加注释来停止序列化,并将其添加到默认的获取组,但没有成功。我想我真的不明白我需要添加哪些来阻止它被序列化。我并不在乎它是否被序列化,只要我能重建集合并访问它的成员

有人能给我举一个简单的例子,说明使用Datanucleus(带或不带序列化)持久化集合,以及反序列化数据所需的任何特殊代码

编辑:这里有一些代码,首先是我要持久化的类

@持久的 公共类轨道{ 私有集fts; 私有字符串名称=; public void setNameString名称{ this.name=名称; } 公共字符串getName{ 返回名称; } 公共无效集合{ this.fts=fts; } 公共集getFts{ 返回fts; } } 我的orm文件的摘录

在我查询数据存储的方法中,我希望在fts属性中获得具有特定值的跟踪对象。此示例查询一个字符串,但在现实生活中,我需要使用AND&&NB在多个字符串上执行此操作。这在GAE/J上运行良好,因此对于我的本地测试环境,我使用Datanucleus 1.1.5

专用磁道检索字符串条件{ PersistenceManagerFactory pmf=JDOHelper .getPersistenceManagerFactorydatanucleus.properties; PersistenceManager pm=pmf.getPersistenceManager; 跟踪res=null; 试一试{ System.out.println查询条件:+criteria; 查询q=pm.newQuerymseries.routes.gpx.Track.class; q、 SetFilterFs.toUpperCase==标准; q、 公布参数串标准; q、 setUniquetrue; q、 setOrderingname升序; res=轨道q.executecriteria.toUpperCase; }最后{ 下午六时正,关闭; } 返回res; } 还有我收到的例外

javax.jdo.JDOFatalUserException: Impossible to query a collection/map field ("mseries.routes.gpx.Track.fts") when it is serialised. Either change your query, or change the field to not be serialised. at org.datanucleus.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:354)
如果在GAE/J环境中使用,那么最好将您的问题标记为这样。 如果在GAE/J之外使用,那么您没有理由使用这种不受支持的古老版本的DataNucleus,即使用v3.0


如果您不想序列化一个集合,那么最好将其包括在内,因为否则您不允许它成为联接表,因此它必须序列化它

我的问题不是关于GAE/J-它使用从某人复制的一些代码在那里工作。我想知道如何在其他环境中为H2和其他RDBMS解决这个问题。你说最好包含一个连接表,否则你不允许它,因此它必须序列化它,我恐怕不明白这意味着什么,你是说包含某种连接,让它创建一个连接表,并让它将fts字符串放在连接表中?DN的新版本会使这更容易吗?编辑器在回复中吞下了join/这个词,现在已经修复了。除了在联接表中之外,您还希望在其他什么地方存储集合?所有这些都符合JDO规范