метод makePersistent PersistenceManager работает ненадежно. один и тот же junit-тест работает и через некоторое время опять падает?! у меня есть объект, который включает в себя набор других объектов. это означает 1-n отношение. моя проблема в том, что junit-тест моих классов иногда дает сбой, потому что объекты в коллекции не сохраняются должным образом. я обычно использую транзакции, но persistanceManager является необязательным для транзакций
я пробовал проверять objectState после каждого createObject и фиксации... я понял, что объекты в коллекции после успешной фиксации не имеют systemId (должны быть сгенерированы автоматически), но находятся в состоянии пустого/постоянно-нетранзакционного.
это означает, что иногда они (если они сохраняются):
Комментарий [systemId=Project(1)/Comment(6), JDO-ObjectState=hollow/persistent-nontransactional]
а иногда и так (если они не сохраняются и рефач родительского объекта содержит пустую коллекцию) Комментарий [systemId=null, JDO-ObjectState=hollow/persistent-nontransactional]
конечно, я мог бы вручную проверить, есть ли у всех сохраненных объектов системный идентификатор, но этот подход совсем не хорош. коммит должен просто потерпеть неудачу!!
я не понимаю, что это иногда работает, а иногда нет! это означает, что мой код не должен быть неправильным, и это ошибка... пожалуйста, помогите мне
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
}