gpt4 book ai didi

java - Jdo错误重复键

转载 作者:行者123 更新时间:2023-12-01 13:21:32 24 4
gpt4 key购买 nike

我有 2 个 A 类、B 类。

这是主类:

public class Main
{
static PersistenceManagerFactory pmf ;

static Transaction tx1 ;
static PersistenceManager pm1 ;

public Main(){

pmf = JDOHelper.getPersistenceManagerFactory("datanucleus.properties");

}

public static void testB(B b){

pm1 = pmf.getPersistenceManager();
tx1=pm1.currentTransaction();

try {
tx1.begin();


B bb=b;

pm1.makePersistent(bb);


tx1.commit();

} finally {
if (tx1.isActive())
{
tx1.rollback();
}
pm1.close();
}
}

public static void main(String args[]) {

Main n=new Main();

String id="4";


A a=new A(id,"prova");

B b2=new B("4a",a);
B b3=new B("5a",a); //// error HERE ////////////////////////////////

Main.testB(b2);
Main.testB(b3);
}
}

当我运行 Main 类时,出现错误,即:

Exception in thread "main" javax.jdo.JDODataStoreException: Insert of object "B@95973d" using statement "INSERT INTO `B` (`ID`,`IDR`) VALUES (?,?)" failed : Duplicate entry '4' for key 'PRIMARY'
at org.datanucleus.api.jdo.NucleusJDOHelper.getJDOExceptionForNucleusException(NucleusJDOHelper.java:421)
at org.datanucleus.api.jdo.JDOPersistenceManager.jdoMakePersistent(JDOPersistenceManager.java:735)
at org.datanucleus.api.jdo.JDOPersistenceManager.makePersistent(JDOPersistenceManager.java:755)
at Main.testB(Main.java:167)
at Main.main(Main.java:322)

据我了解,在 Main 类中,特别是在这行代码中:

    A a=new A(id,"prova");

B b2=new B("4a",a);
B b3=new B("5a",a); //// error HERE ////////////////////////////////

Main.testB(b2);
Main.testB(b3);

我收到错误“重复条目 '4 ' for key ' PRIMARY '”

在B表中,我想为A表的某个PK插入多个值,如何修复?

最佳答案

因此,当您持久化 B 时,“A”对象处于“ transient ”状态,因此它每次都会尝试持久化一个新的 A。相反,如果您保留 A,然后分离它(pm.detachCopy,当对象被标记为可分离时)并将 B 的 A 字段设置为该值,它将起作用。任何 JDO 文档都引用了分离和对象状态。像这样创建 A

pm.currentTransaction().begin();
A a = new A(id,"prova");
a = pm.makePersistent(a);
A detachedA = pm.detachCopy(a);
pm.currentTransaction().commit();

然后使用“detachedA”和 B 的持久化。

关于java - Jdo错误重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21993064/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com