【发布时间】:2013-10-25 14:52:53
【问题描述】:
我正在努力使用基于实体的复合主键映射一对多双向关系。我创建了一些代表我想做的类。它们只是制作出来的,因此更容易解释,但我认为它们传达了我正在努力做好的事情。
我没有实现一些接口/方法,但我可以确保当我不将锦标赛集合添加到 Player/Game 实体时它可以工作。所以我的映射有问题。
当我试图找到一个实体(几乎可以做任何事情)时,Hibernate 4.x 会导致一个空标识符错误,只说明该错误。
当我在“one”上有一个复合主键并且我想要双向导航时,映射它的正确方法是什么?
@Entity
@IdClass(TournamentPk.class)
public class Tournament {
@Id
@ManyToOne
@JoinColumn("player_id")
private Player player;
@Id
@ManyToOne
@JoinColumn("game_id")
private Game game;
private int score;
// Getters and Setters
// Hashcode and Equals
}
// Primary key class.
public class TournamentPk {
private Player player;
private Game game;
// Getters and Setters
// Hashcode and Equals
}
@Entity
public class Player {
// ID
// Other fields
@OneToMany(fetchType = FetchType.EAGER, mappedBy = "player")
private Set<Tournament> tournaments;
// Getters and Setters
// Hashcode and Equals
}
@Entity
public class Game {
// ID
// Other fields
@OneToMany(fetchType = FetchType.EAGER, mappedBy = "game")
private Set<Tournament> tournaments;
// Getters and Setters
// Hashcode and Equals
}
【问题讨论】:
-
尝试使用
@EmbeddedId而不是@IdClass -
您能否提供确切的异常消息?当您尝试查找什么类型的实体时出现错误?
标签: java hibernate jakarta-ee jpa