私は非常に奇妙な問題を抱えています。私たちは、hibernateアノテーションを基にしたjpa 2.0を使用しています。 JPA DDLで生成されたデータベースは真であり、MySQLはデータベースです。JPA 2.0 Provider Hibernate
私はいくつかの参照クラスを提供し、次に私のポールブを提供します。
@MappedSuperclass
public abstract class Common implements serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false)
private Long id;
@ManyToOne
@JoinColumn
private Address address;
//with all getter and setters
//as well equal and hashCode
}
@Entity
public class Parent extends Common{
private String name;
@OneToMany(cascade = {CascadeType.MERGE,CascadeType.PERSIST}, mappedBy = "parent")
private List<Child> child;
//setters and rest of class
}
@Entity
public class Child extends Common{
//some properties with getter/setters
}
@Entity
public class Address implements Serializable{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", updatable = false)
private Long id;
private String street;
//rest of class with get/setter
}
のコードのように、あなたはすべての子がリスト内のオブジェクトに変更親クラスのアドレスrefferenceが、それは同じ変更を反映するときに両方のアドレスプロパティとIDを持っているが、問題が発生し、親と子のクラスは共通クラスを拡張していることがわかりますそして、子クラスの変更アドレスrefferenceが、その後に合流するならば、それはJPAの問題があり、私はそれが把握することはできませんよアドレス親のrefference同様
を変更したり、住所のインスタンスを共有している場合は
ここには欠落しているマッピング情報が少しあります。あなたは継承をマップしようとしていますか、まったく同じ構造を持つPARENTテーブルとCHILDテーブルを分けていますか?クラスレベルの注釈(@Entityなど)を持っていればそれを含めることができますか? –
Spring MVCへの参照が削除されました。関連性がなく、問題を混乱させます。 – skaffman
ありがとうDavisはい私はこれらの注釈を配置することを忘れました、実際には、継承されたクラス共通のフィールドを持つ親と子のための別のテーブルを持っています。私が理解できないことは、親の子アドレスの参照を変更する理由です。親のアドレスの参照を変更するとき – Rooh