私は人物オブジェクトとコンピュータオブジェクトを持っています。 この人物オブジェクトはコンピュータという名前のフィールドがあり、1人は1台のコンピュータと1対1の関係を持つことができます。カスケードタイプ:ALL、MERGEなど
class Person{
@OneToOne(cascade=CascadeType.ALL)//in which situations this is true?
@JoinColumn(name = "computer_id",nullable=false)
private Computer computer;
getComputer(){...}
setComputer(Computer c){...}
@Id
private String id;
}
class Computer{
@Id
private String id;
}
私はDB上にコンピュータオブジェクトを持っていると仮定してください。私はそれをロードメソッドで取得します。
Computer computer=entityManager.loadById({an id});
Person p=new Person();
p.setComputer(computer);
ここで、コンピュータと人の両方を保存したい場合、どうすればよいですか?
entityManager.persist(p);
私は同じエラーを生成することはできませんが、しばらく前に、「分離されたエンティティを継承して渡す」エラーが発生しました。
リピートせずにすべてをDBに保存する最も適切な方法は何ですか?
さまざまな状況で何をすべきかを理解するために、リソース(書籍かもしれません)にアドバイスすることもできます。あなたが記述した場合に任意のカスケードを必要とし、ユーザーを永続化することは十分でありません
返信いただきありがとうございます。私は "永続的な"消えて、尋ねたい。あなたはそれが変更した後に私は永続と呼ぶと、それはdbに行くときまで言ったが、いつまで?何の後でも、私のオブジェクトは永続性を失います。たとえば、次のようなメソッドがあります。 'public Computer foo(){Computer c = new Computer(); (); '' Person person = new Person(); '' Person' = new Person(); person.add(comp); em.persist(person); ' – merveotesi
エンティティがデタッチされるまで、つまりこれらのコールを取り囲むトランザクションがコミットまたはロールバックされるまで。エンティティをシリアライズしてデシリアライズすると、結果のエンティティもデタッチされます。 –