我遇到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等
答案 0 :(得分:3)
你尝试的是不可能的。 Game
是一个接口,您无法将接口映射到DB,因为hibernate不知道要使用哪个实现。但你可以做的是
GameImpl
类。我的意思是纠正您的ResultHistoryImpl
课程:@OneToMany private final Set<GameImpl> games = new HashSet<GameImpl>();
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;
}