JPA / Hibernate:使用嵌入式id的一部分作为键(没有连接表)将一对多映射到hashmap

时间:2016-01-28 15:20:31

标签: java hibernate jpa

我遇到了以下问题:

我有一个嵌入复合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 ;

0 个答案:

没有答案