PersistenceManager的makePersistent方法无法正常工作。一个同一个junit-test正在运行,一段时间后再次失败?
我有一个包含其他对象集合的对象。这意味着1-n关系。
我的问题是我的类的junit-test有时会失败,因为集合中的对象没有正确持久化。
我通常使用交易,但persistanceManager是交易可选的

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

这意味着有时它们是(如果坚持的话):

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

有时是(如果未持久化并且对父对象的引用包含一个空集合)
注释[systemId = null,JDO-ObjectState =空心/持久-非事务性]

当然,我可以手动检查所有存储的对象是否都具有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
}


childObject

    @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。永远不要重复使用下午!

09-11 19:38