Hibernate - 使用@OneToMany或@ManyToMany定位未映射的类:com.podro.model.Journey.roadWay [com.podro.model.RoadElement]

时间:2016-04-30 14:02:36

标签: java mysql hibernate spring-mvc

我看到了类似的问题,但答案没有帮助。所以,我得到了这个错误:

@Entity
@Table(name="Journey")
public class Journey {
    // Some other fields
    @Column(name="road_way")
    @ManyToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
    private List<RoadElement> roadWay;
}


@MappedSuperclass
public interface RoadElement {}

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name="Point")
public class Point implements RoadElement{

    @Id
    @Column(name="id")
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private int id;

    private String name;
    @Column(name="time_in_days")
    private int timeInDays;
    private Rate rating;
}

@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@Table(name="Section")
public class Section implements RoadElement{

    @Id
    @Column(name="id")
    @GeneratedValue(strategy= GenerationType.IDENTITY)
    private int id;

    @Column(name="section_name" , length=100)
    private String sectionName;

    @Column(name="time_in_days")
    private int timeInDays;

    @Column(name="kind_of_transport")
    private Locomotion kindOfTransport;

}

我正在尝试使用RoadElements对象创建List(这是Point和Section类的接口)。还有其他办法吗?据我所知,我想这是为这些类创建正确映射的唯一方法,并列出了这些元素。

public class MiClase {
private int a;
private Object b;
//Get and Set method

感谢您的回答,我将非常感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

实体之间的关联。 RoadElement不是实体。它是一个界面。

你可能不会做你想做的事情。 Hibernate需要知道roadWay中包含的实体的类型。

因此,RoadElement应该是一个使用@Entity注释的类,具有唯一标识所有道路元素(部分,点等)中的RoadElement的ID

Section和Point应该从RoadElement扩展,并且不应该有自己的ID,因为它是从RoadElement继承的。