新しいオブジェクトは、オブジェクトプロパティに設定しようとするたびに作成されます。誰かにこれを再現させる。それはデフォルトの動作ですか?設定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は既に作成されています。新しい商品を作成するには、商品は1つの商品クラスに属していなければなりません。つまり、あなたが言ったように1-1関係です。右? – Hopecee
これはトランザクション外で検索されたため、TRANSIENTですか?またはデタッチ? – DN1