gpt4 book ai didi

java - 对于拥有的一对多 rs,makePersistent。在 JDO 中无法可靠工作

转载 作者:行者123 更新时间:2023-12-01 15:11:38 24 4
gpt4 key购买 nike

PersistenceManager 的 makePersistent 方法工作不可靠。一个和同一个 junit 测试正在工作,但过了一会儿又失败了?!我有一个对象,其中包含其他对象的集合。这意味着 1-n 关系。我的问题是我的类的 junit 测试有时会失败,因为集合中的对象没有正确保存。我通常使用事务,但 persistanceManager 是事务可选的

我尝试在每次创建对象并提交后检查对象状态...我发现成功提交后集合中的对象没有 systemId (应该自动生成),但处于空洞/持久非事务状态。

这意味着有时它们是(如果它们持续存在):

评论 [systemId=Project(1)/Comment(6),JDO-ObjectState=空心/持久非事务]

有时它们是(如果它们没有被持久化并且父对象的重新更新包含一个空集合)注释 [systemId=null, JDO-ObjectState=hollow/persistent-nontransactional]

当然,我可以手动检查所有存储的对象是否都有 systemId,但这种方法一点都不好。提交应该失败!!

我不明白它有时有效有时无效!这意味着我的代码不应该是错误的,这是一个错误......请帮助我

PS:如果有必要,我可以发布一些代码!

@PersistenceCapable
public class Ble implements Serializable, JDOObject<Ble> {

/**
*
*/
private static final long serialVersionUID = 1L;

// NotNull
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key systemId;

// NotNull
@Persistent
private Key parentId;

// NotNull
@Persistent
@Extension(vendorName = "datanucleus", key = "gae.parent-pk", value = "true")
private Key projectId;

// NotNull
@Persistent
private String title;

@Persistent
private int position;

@Persistent
private boolean hasChildren;

@Persistent
private BleData requirementData;

@Persistent
private List<Comment> comments;


//getter/setter
}

子对象

    @PersistenceCapable
public class Comment implements Serializable, JDOObject<Comment> {

/**
*
*/
private static final long serialVersionUID = 1L;

@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
private Key systemId;

@Persistent
private String text;

@Persistent
private long createdTimestamp;

//getter//Setter
}

最佳答案

解决方案始终是为每个事务使用新的 persistanceManager。切勿重复使用 pm!!

关于java - 对于拥有的一对多 rs,makePersistent。在 JDO 中无法可靠工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12267231/

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