Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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
在一个事务中混合使用JDO(DataNucleus)和JPA(Hibernate)对象_Hibernate_Jpa_Jdo_Datanucleus - Fatal编程技术网

在一个事务中混合使用JDO(DataNucleus)和JPA(Hibernate)对象

在一个事务中混合使用JDO(DataNucleus)和JPA(Hibernate)对象,hibernate,jpa,jdo,datanucleus,Hibernate,Jpa,Jdo,Datanucleus,这会是个问题吗 我有一个遗留系统,它使用javax.jdoapi和XML映射来处理从数据库中写入/读取它的对象 我还有一些扩展这个系统的代码,这部分使用JPA和Hibernate(通过注释,使用Spring管理的声明性事务) 我想把它们放在同一个伞下,这样我可以更好地管理交易。我想重写我的代码以使用DataNucleus,但我希望坚持使用JPA(因此我不必更改映射等) 所以问题是:是否有可能在项目的两个部分中混合使用JPA和JDO,并在混合中跨越事务?还是我必须只选择一种方法 感谢您的帮助。Da

这会是个问题吗

我有一个遗留系统,它使用javax.jdoapi和XML映射来处理从数据库中写入/读取它的对象

我还有一些扩展这个系统的代码,这部分使用JPA和Hibernate(通过注释,使用Spring管理的声明性事务)

我想把它们放在同一个伞下,这样我可以更好地管理交易。我想重写我的代码以使用DataNucleus,但我希望坚持使用JPA(因此我不必更改映射等)

所以问题是:是否有可能在项目的两个部分中混合使用JPA和JDO,并在混合中跨越事务?还是我必须只选择一种方法


感谢您的帮助。

DataNucleus显然允许您使用JDO或JPA注释(或同时使用两者),并使用JDO或JPA使用持久性(因此JPA注释与JDO PersistenceManager配合使用,反之亦然)。很可能,如果应用程序的一部分有一个PM,另一部分有一个EM,则事务是分开的。

这在某些情况下实际上不起作用,基本上hibernate和data nucleus都在持久类上使用自己生成的代理。因此,在hibernate中生成的代理类在您尝试持久化时不会被data nucleus识别,因为它是一个代理类。

理论上,如果两者都使用JTA,则事务不应分开。但在实践中不确定。据我所知,DataNucleus不生成代理,它使用字节码编织将附加行为注入原始对象。相比之下,Hibernate不使用字节码,因此为了完成任务,它会动态创建代理。关于你的第二点,我并没有说我想用DataNucleus持久化Hibernate代理。我想切换到DataNucleus实现,并保留JDO和JPA注释和API。对不起,我没说清楚。