我遇到了以下问题:
我有一个嵌入复合id的实体。该实体在一对多关系中用作“多个”。我想在“一”侧用Map来引用这种关系,其中键是嵌入式id的一个属性,值是实体本身(请参阅下面的代码以便澄清)。
我已经尝试了几种ElementCollection,JoinColumn,MapKeyColumn和MapKeyJoinColumn注释的组合,包括JPA和hibernate特定的注释,但无法使其工作。也许这对嵌入式ID来说是不可能的?
@Entity
public class Item {
@Column
private Long id;
//Which annotations to use here?
private Map<Team, TeamStatus> statusses;
}
和
@Entity
public class Team {
@Column
private Long id;
}
和
@Entity
public class TeamStatus {
@EmbeddedId
private ItemTeamPk itemTeamPk;
@Column
private Boolean statusFlag;
}
和
@Embeddable
public class ItemTeamPk {
@ManyToOne
private Team team;
@ManyToOne
private Item item;
}
编辑:注意我使用的是JPA 2.1
我得到的错误:
使用
@javax.persistence.OneToMany
@javax.persistence.MapKeyJoinColumn(name = "itemTeamPk.team")
private Map<Team, TeamStatus> teamStatusses;
给出
org.h2.jdbc.JdbcSQLException: Table "ITEM_TEAMSTATUS" not found
使用team_id,itemTeamPk.team_id或任何其他值作为名称时相同。 使用时也会出现相同的错误:
@javax.persistence.OneToMany
@javax.persistence.MapKey(name = "itemTeamPk")
private Map<Team, TeamStatus> teamStatusses ;