Java InheritanceType.JOINED。mappedBy引用未知的目标实体属性
我需要Java InheritanceType.JOINED。mappedBy引用未知的目标实体属性,java,entity-framework,hibernate,jpa,Java,Entity Framework,Hibernate,Jpa,我需要furtyball具有完整层次结构的深度副本,以便使用新id持久化。我试图用这样的层次结构映射实体 当我尝试加载水果篮实体时,会出现以下错误: org.hibernate.AnnotationException:mappedBy reference一个未知的目标实体属性:果篮中的Apple.fruitBasket.apples 以下是我尝试过的: import javax.persistence.*; import java.io.Serializable; @Entity @Inher
furtyball
具有完整层次结构的深度副本,以便使用新id持久化。我试图用这样的层次结构映射实体
当我尝试加载水果篮实体时,会出现以下错误:
org.hibernate.AnnotationException:mappedBy reference一个未知的目标实体属性:果篮中的Apple.fruitBasket.apples
以下是我尝试过的:
import javax.persistence.*;
import java.io.Serializable;
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "FRUIT")
public class Fruit implements Serializable {
@Id
@Column(name = "ID")
@SequenceGenerator(name = "FRUIT_SEQ")
private Long id;
@ManyToOne
@JoinColumn(name = "FRUIT_BASKET_ID")
private FruitBasket fruitBasket;
// additional fields are insignificant
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public FruitBasket getFruitBasket() {
return fruitBasket;
}
public void setFruitBasket(FruitBasket fruitBasket) {
this.fruitBasket = fruitBasket;
}
public <T extends Fruit> T copy(Class<T> clazz) {
T fruit;
try {
fruit = clazz.newInstance();
}
catch (InstantiationException | IllegalAccessException e) {
throw new RuntimeException(e);
}
return fruit;
}
}
import javax.persistence.*;
导入java.io.Serializable;
导入java.util.ArrayList;
导入java.util.Collection;
@实体
@表(name=“果篮”)
公共类水果篮实现可序列化{
@身份证
@列(name=“ID”)
@SequenceGenerator(名称=“果篮”)
私人长id;
@OneToMany(mappedBy=“果篮”)
私人收藏尝试在果篮实体中使用多态关联,如下所示
@OneToMany(mappedBy = "fruitBasket")
private Collection<Fruit> fruits = new ArrayList<>();
但我需要苹果和梨子提供的其他信息。这些类包含不同的信息。我如何处理这样的建议?只需抛出从数据库中获取的水果,比如:if(苹果的水果实例)…谢谢。但我想我还没有完全阐明问题的本质。我已经更新了帖子
@Entity
@Table(name = "PEAR")
public class Pear extends Fruit {
// additional fields are insignificant
// copy pear
public Pear copy() {
return super.copy(getClass());
}
}
import javax.persistence.*;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collection;
@Entity
@Table(name = "FRUIT_BASKET")
public class FruitBasket implements Serializable {
@Id
@Column(name = "ID")
@SequenceGenerator(name = "FRUIT_BASKET_SEQ")
private Long id;
@OneToMany(mappedBy = "fruitBasket")
private Collection<Apple> apples = new ArrayList<>();
@OneToMany(mappedBy = "fruitBasket")
private Collection<Pear> pears = new ArrayList<>();
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Collection<Apple> getApples() {
return apples;
}
public void setApples(Collection<Apple> apples) {
this.apples = apples;
}
public Collection<Pear> getPears() {
return pears;
}
public void setPears(Collection<Pear> pears) {
this.pears = pears;
}
public void addApple(Apple apple) {
apple.setFruitBasket(this);
apples.add(apple);
}
public void addPear(Pear pear) {
pear.setFruitBasket(this);
pears.add(pear);
}
public FruitBasket copy() {
FruitBasket newFruitBasket = new FruitBasket();
for (Apple apple : apples) {
newFruitBasket.addApple(apple.copy());
}
for (Pear pear : pears) {
newFruitBasket.addPear(pear.copy());
}
return newFruitBasket;
}
}
@OneToMany(mappedBy = "fruitBasket")
private Collection<Fruit> fruits = new ArrayList<>();
@OneToMany(mappedBy = "fruitBasket")
private Collection<Apple> apples = new ArrayList<>();
@OneToMany(mappedBy = "fruitBasket")
private Collection<Pear> pears = new ArrayList<>();
Fruit fruit = session.get(Fruit.class, fruitId);
if(fruit instanceOf Apple) Apple apple = (Apple) fruit