Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 持久化@Embeddeble的@ElementCollection(谷歌应用程序引擎、datanucleus)_Java_Google App Engine_Datanucleus - Fatal编程技术网

Java 持久化@Embeddeble的@ElementCollection(谷歌应用程序引擎、datanucleus)

Java 持久化@Embeddeble的@ElementCollection(谷歌应用程序引擎、datanucleus),java,google-app-engine,datanucleus,Java,Google App Engine,Datanucleus,我正在尝试使用JPA2注释将一个JPA实体与一组自定义@Embeddeble对象持久化。简单示例(两个类都由datanucleus增强): 使用@Embedded持久化一组基本类型(如字符串)或嵌入一个TestEmbeddable对象效果非常好是否有人能澄清datanucleus appengine是否支持嵌入的元素集合? 上的datanucleus部分仅给出了字符串集合的示例,而相应的部分使用了自定义的仅嵌入类型。进一步说明嵌入式集合通常与GAE兼容,但没有说明是否支持自定义类型。我还发现另一

我正在尝试使用JPA2注释将一个JPA实体与一组自定义@Embeddeble对象持久化。简单示例(两个类都由datanucleus增强):

使用@Embedded持久化一组基本类型(如字符串)或嵌入一个TestEmbeddable对象效果非常好是否有人能澄清datanucleus appengine是否支持嵌入的元素集合?

上的datanucleus部分仅给出了字符串集合的示例,而相应的部分使用了自定义的仅嵌入类型。进一步说明嵌入式集合通常与GAE兼容,但没有说明是否支持自定义类型。我还发现另一个人声称

--编辑--

根据DataNucleus的回答,我又进行了一些测试:

@ElementCollection
private List<String> stringsElementCollection;
@ElementCollection
私有列表stringsElementCollection;
-->工作。单个字符串被持久化为TestEntity.stringsElementCollection=[str1,str2,…]

@Embedded
private List<String> stringsEmbedded;
@Embedded
私有列表字符串化;
-->与@ElementCollection相同。不过,我想知道JPA规范是否涵盖了对集合的使用

@ElementCollection
private List<TestEmbeddable> embeddablesElementCollection;
@ElementCollection
私有列表嵌入元素集合;
-->不起作用。与实际的TestEmbeddable对象不同,数据存储只保留一个空值集合:TestEntity.EmbeddedableElementCollection=[null,null,…]

@Embedded
private List<TestEmbeddable> embeddablesEmbedded;
@Embedded
可嵌入的私有列表;
-->这似乎奏效了。TestEmbeddable.s字段存储为TestEntity.s.0、.s.1等加上TestEntity.embeddedablesembedded.size属性


(App Engine SDK 1.7.7.1、datanucleus 3.1.3、datanucleus appengine 2.1.2)

不知道Google是否支持JPA嵌入的此类对象集合。这只是为JDO开发的,并在那里工作。您可以尝试在嵌入字段中添加@Embedded,以强化其嵌入的想法。

David Geiger在此处记录了该问题:

你试过了吗。这个API为您的开发封装了很多东西。谢谢您的提示!虽然将
@Embedded
@ElementCollection
组合起来不起作用,但仅使用
@Embedded
是有效的,尽管我不确定它应该以什么方式工作。查看上面的结果-你觉得这样对吗?关于您提到的谷歌支持,datanucleus appengine是否需要为此提供明确的JPA支持?我认为DataNucleus是从JDO/JPA层抽象出来的,DataNucleus appengine“仅”翻译数据存储的DataNucleus功能,而不管是使用JDO还是JPA……此外,我刚刚注意到JPA实现(可能与JDO相同?)显然不会跟踪可嵌入对象集合的更改,如果未明确标记为脏,则使用
@Embedded
以及
@Lob
。不过,它适用于字符串(
@ElementCollection
@Embedded
)。是的,他们的插件必须利用元数据中只有JPA才有的东西。唯一要说的是使用他们插件的最新SVN主干(因为这已经有一段时间没有发布了,可能会也可能不会影响事情),当出现问题时,你可以向他们的问题跟踪者报告,因为谷歌可能不太关心监控一些Stackoverflow标签
@ElementCollection
private List<TestEmbeddable> embeddablesElementCollection;
@Embedded
private List<TestEmbeddable> embeddablesEmbedded;