Привет, я новичок в JPA, и мне трудно понять, как он обрабатывает наследование.
У меня есть конкретная проблема, которую мне нужно решить без изменения схемы БД, но если вы не можете найти решение, я был бы признателен за предложения по решению с другой схемой БД (приветствуются решения 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 еще не сохранен.
Если я пытаюсь сохранить объект Apple с уже сохраненным объектом Fruit:
Fruit fruit1 = new Fruit("1", "Small");
Apple apple1 = new Apple(fruit1, "red");
provider.create(fruit1);
provider.create(apple1);
Я получу сообщение об ошибке, поскольку JPA пытается создать новую строку в таблице Fruit с Id = "1"
который уже существует.
..