こんにちは私はJPAを初めて使用し、JPAが継承をどのように処理するかを理解するのに苦労しています。
DBスキームを変更せずに解決する必要がある特定の問題がありますが、解決策が見つからない場合は、別のDBスキームを使用した解決策の提案をいただければ幸いです(Hibernate / TopLinkソリューションを歓迎します)。
不明な点がある場合、または詳細が必要な場合は、その旨を教えてください。前もって感謝します!
私はこのデータベースを持っています:
TABLE Fruit
Id Varchar (10) Primary Key
size Varchar (10)
fruit_type Varchar(10)
TABLE Apple
Id Varchar (10) Primary Key Foreign Key references Fruit.Id
Apple_Property Varchar(10)
これまでのところ、私のエンティティは次のようになっています。
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="fruit_type", discriminatorType=DiscriminatorType.Char)
@DiscriminatorValue(value="fruit")
public class Fruit implements Serializable {
@Id
protected String Id;
protected String size;
}
@Entity
@DiscriminatorValue(value="apple")
//@PrimaryKeyJoinColumn(name="Id" , referencedColumnName="Id")
public class Apple extends Fruit implements Serializable {
private String Apple_Property;
}
現在、Fruitオブジェクトを問題なく永続化できます。Appleオブジェクトは、Fruitオブジェクトがまだ永続化されていない場合にのみ永続化されます。
すでに永続化されているFruitオブジェクトを使用してAppleオブジェクトを永続化しようとすると:
Fruit fruit1 = new Fruit("1", "Small");
Apple apple1 = new Apple(fruit1, "red");
provider.create(fruit1);
provider.create(apple1);
JPAがすでに存在するId="1"でFruitテーブルに新しい行を作成しようとするため、エラーが発生します。
..