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