当前位置: 首页 > 知识库问答 >
问题:

detachCopy正在使用ObjectDB处理JDO?

丁安宜
2023-03-14

pm.detachcopy正在工作?

我正在制作一个spring+ObjectDB(JDO)程序。

PersistenceManager#DetachCopy返回一个瞬态对象,尽管@PersistenceCapable:Detachable为true。

下面是一个示例代码。

我有一个简单的测试模型(POJO)

@PersistenceCapable(identityType = IdentityType.APPLICATION, detachable="true")
public class TestModel {
@Persistent(valueStrategy=IdGeneratorStrategy.IDENTITY)
@PrimaryKey
private Long id;
@Persistent
private String name;
// getter, setter
}

可分离的设置为“true”。

而dao是

public class TestModelDaoImpl {
    private PersistenceManagerFactory persistenceManagerFactory;
    public void setPersistenceManagerFactory(PersistenceManagerFactory pmf) {
        this.persistenceManagerFactory = pmf;
    }

    public TestModel makePersistent(TestModel obj){
        PersistenceManager pm = persistenceManagerFactory.getPersistenceManager();
        Transaction tx = pm.currentTransaction();
        tx.begin();
        pm.makePersistent(obj);
        System.out.println(" obj => " + JDOHelper.getObjectState(obj)); //  => (1) persistent-new
        TestModel detachedObj = pm.detachCopy(obj);
        System.out.println(" detachedObj => " + JDOHelper.getObjectState(detachedObj)); // => (2) transient .. 
        tx.commit();
        return detachedObj;
        // try catch is omitted
    }
}

我认为我在(2)处有一种超然的状态。但只是暂时的。

ObjectDB的版本是2.4.0_05

应用程序-context.xml

    <bean id="pmf" class="org.springframework.orm.jdo.LocalPersistenceManagerFactoryBean">
        <property name="jdoProperties">
            <props>
               <prop key="javax.jdo.PersistenceManagerFactoryClass">com.objectdb.jdo.PMF</prop>
               <prop key="javax.jdo.option.ConnectionURL">$objectdb/db/testdb.odb</prop>
               <prop key="javax.jdo.option.ConnectionUserName">admin</prop>
               <prop key="javax.jdo.option.ConnectionPassword">admin</prop>
            </props>
        </property>
    </bean>
    <bean id="jdoTransactionManager" class="org.springframework.orm.jdo.JdoTransactionManager">
        <property name="persistenceManagerFactory">
            <ref local="pmfProxy"/>
        </property>
    </bean>
    <bean id="pmfProxy" class="org.springframework.orm.jdo.TransactionAwarePersistenceManagerFactoryProxy">
        <property name="targetPersistenceManagerFactory" ref="pmf"/>
        <property name="allowCreate" value="true"/>
    </bean>

共有1个答案

康弘义
2023-03-14

JDO需要增强所有可持久的类。ObjectDB支持使用不加增强的持久类作为JDO的扩展,但在该模式下并不支持所有的JDO特性。

特别是,当使用非增强的持久性类的实例时,瞬态对象和分离对象看起来是一样的(因为类缺少了在增强过程中添加的额外字段,以保留额外的信息)。

使用增强的TestModel类运行测试将提供预期的结果:

obj=>Persistent-新建

detachedObj=>分离-清除

 类似资料:
  • 我正在使用ObjectDB构建一个Spring MVC应用程序。我的目标是使用Java8 Date and Time作为在where子句中进行比较的查询参数。 假设有以下实体具有度量datetime对象: 和以下存储库: 现在,如果我在我的存储库上调用,我会得到一个空的可迭代对象。相反,调用会给我数据库中的所有实体(包括它们正确的dateTime)。 我知道这是由于JPA中不存在新的Time AP

  • ObjectDB 是个功能强大的Java对象数据库,具有简单、快速、可靠和易用等特点。支持从KB到GB的数量级,可以用来嵌入到各种 Java 应用中。兼容 JDO 规范。

  • 正则表达式是一种进行模式匹配和文本操纵的复杂而又强大的工具。虽然正则表达式比纯粹的文本匹配效率低,但是它却更灵活。按照它的语法规则,随需构造出的匹配模式就能够从原始文本中筛选出几乎任何想你要得到的字符组合。如果你在Web开发中需要从一些文本数据源中获取数据,那么你只需要按照它的语法规则,随需构造出正确的模式字符串就能够从原数据源提取出有意义的文本信息。 Go语言通过regexp标准包为正则表达式提

  • 在处理中,我有以下错误: 我正在尝试运行“exemplePPhys2D_geeknessrain.pde”,可以在 https://projets.pingbase.net/libro/projects/hub/repository/revisions/7/entry/EXEMPLES/pphys2d/examples/exemplePPhys2D_geeknessrain/exemplePPhy

  • 我将我的jms队列更改为JMS1。然而,当我执行代码时,我得到一个异常。 我的期望是,每当我得到异常时,我的bean类都应该被调用,但事实并非如此。 runtimeCamelException:org.apache.camel.FailedToCreateRouteException:在以下位置创建路由route1失败:>>>到[jms1:queue:finalqSource]<<<在route:

  • 我在Jboss AS7Wildfly中部署使用ObjectDB的项目时遇到了麻烦。 首先,我使用了objectDB教程项目,该项目最初是为Glassfish开源版设计的: 向persistence.xml文件添加了java:/defaultds语句。 使用了objectdb-jee.jar而不是objectdb.jar 但我还是收到了一些消息,告诉我Jboss找不到提供者。 如果有人知道如何使Jb