새 개체를 개체 속성으로 설정할 때마다 새 개체가 만들어집니다. 누군가가 이것을 재현하도록하십시오. 기본 동작입니까? 설정 1-1 기존 개체와의 관계가 JDO를 사용하는 대신 새 개체를 삽입 하시겠습니까?
public class ProductClass implements Serializable {
...
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
long id;
@Persistent
private String name = null;
...
}
public class Product implements Serializable {
...
@PrimaryKey
@Persistent(valueStrategy = IdGeneratorStrategy.IDENTITY)
long id;
@Persistent
private String name = null;
@Persistent(defaultFetchGroup = "true")
private ProductClass productClass = null;
...
}
이
내가 내ProductClassNeo4jService
를 구현하여 데이터베이스에서
ProductClass
를 검색하는 방법이다;
@Override
public ProductClass findById(Long id) {
if (id == null) {
return null;
}
PersistenceManager pm
= JDOUtil.PERSISTENCE_MANAGER_FACTORY.getPersistenceManager();
ProductClass prod = null;
try {
prod = (ProductClass) pm.getObjectById(ProductClass.class, id);
} finally {
pm.close();
}
return prod;
}
...
ProductClass prodClass = productClassNeo4jService.findById(id);
제품을 이와 같이 유지합니다.
...
Product prod = new Product();
prod.setName('productName');
prod.setProductClass(prodClass);
PersistenceManager pm = JDOUtil.PERSISTENCE_MANAGER_FACTORY.getPersistenceManager();
Transaction tx = pm.currentTransaction();
try {
tx.begin();
pm.makePersistent(prod);
Object id = pm.getObjectId(prod);
tx.commit();
} finally {
if (tx.isActive()) {
tx.rollback();
}
pm.close();
}
...
ProductClass를 Product로 설정하는 대신 새로운 ProductClass가 생성됩니다. 내가 도대체 뭘 잘못하고있는 겁니까?
"문자열이 아닌 개체"란 무엇입니까? 당신은 1-1 관계가 있습니다! 'prodClass' 파일은 어디에 생성됩니까? 'makePersistent'를 호출 할 때 어떤 객체 생명주기 상태입니까? 이 모든 것은 JDO 스펙과 JDO 문서에 정의되어 있습니다. – DN1
@ DN1 감사합니다. 어떻게 prodClass를 검색하는지 추가했습니다. productClass가 이미 생성되었습니다. 새 제품을 생성하려면 제품이 하나의 productClass에 속해야합니다. 당신이 말했듯이 1-1 관계입니다. 권리? – Hopecee
그래서 트랜잭션 외부에서 검색되었으므로 TRANSIENT입니까? 또는 탈퇴 했습니까? – DN1