Hibernate,OneToMany,AnnotationException

时间:2014-03-21 11:21:22

标签: java spring hibernate

我遇到OneToMany注释问题

@Entity
@Table(name = "RESULT_HISTORY")
public class ResultHistoryImpl implements ResultHistory, Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;


    @OneToMany
    private final Set<Game> games = new HashSet<>();


...

}

和班级

@Entity
@Table(name = "GAME")
public class GameImpl implements Game, Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    ...
}

我有更多字段,setter / getters和构造函数

我使用spring,在我的配置文件中,我有packagesToScan,我放了那些类的包

问题是我得到org.hibernate.AnnotationException:使用@OneToMany或@ManyToMany定位未映射的类

我在stackoverflow上阅读了很多主题,所以问题不在于使用org.hibernate.annotation等

3 个答案:

答案 0 :(得分:3)

你尝试的是不可能的。 Game是一个接口,您无法将接口映射到DB,因为hibernate不知道要使用哪个实现。但你可以做的是

  1. 直接在所有实体类中使用GameImpl类。我的意思是纠正您的ResultHistoryImpl课程:@OneToMany private final Set<GameImpl> games = new HashSet<GameImpl>();
  2. 如果您想要另一个抽象,请添加一个抽象类AbstractGame implements Game并使用@Entity对其进行注释,并使用它而不是Game接口。

答案 1 :(得分:0)

在游戏中使用@MappedSuperclass注释。

答案 2 :(得分:0)

对于@OneToMany,您必须提供一个mappedBy属性,该属性指向另一个类中的字段名称。在你的情况下:

public class ResultHistoryImpl {
...
    @OneToMany(mappedBy = "resultHistory")
    private final Set<GameImpl> games = new HashSet<>();
}

public class GameImpl {
    @ManyToOne
    @JoinColumn(name = "result_history")
    private ResultHistoryImpl resultHistory;
}