Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java InheritanceType.JOINED。mappedBy引用未知的目标实体属性_Java_Entity Framework_Hibernate_Jpa - Fatal编程技术网

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