如何在Map中控制JPA列名

时间:2015-02-19 15:52:42

标签: java hibernate jpa hibernate-mapping

实体构建

有以下地图:

    @Column(name = "paper_FK")
    @ManyToMany
    @JoinTable(inverseForeignKey = @ForeignKey(name = "construction_FK"), joinColumns = @JoinColumn(name = "construction_FK", referencedColumnName = "construction_FK"), name = "ConstructionPaperTracks", inverseJoinColumns = @JoinColumn(name = "paper_FK"))

private HashMap<Integer, Paper> tracks_field = new HashMap<Integer, Paper>();

由于我的数据库设计指南表了ConstructionPaperTracks 应该有列construction_FK,position和paper_FK。

JPA使用build_id,position和paper_id。

如何指定列名?

最好的问候

的Heiko

1 个答案:

答案 0 :(得分:1)

我不确定我理解“JPA适用于construction_id,position和paper_id。”

无论如何,我相信映射如下:

@Entity
public class Construction{

    @Id
    @Column(name = "construction_id")
    //specify a generation strategy
    private Long id;

    @ManyToMany
    @JoinTable(name = "ConstructionPaperTracks", 
                joinColumns = @JoinColumn(name = "construction_FK"), 
                    inverseJoinColumns = @JoinColumn(name = "paper_FK"))
    @MapKeyColumn(name = "position")
    private HashMap<Integer, Paper> paper;
}

您需要指定@MapKeyColumn,其中包含以下状态的文档:

  

如果映射键用于ManyToMany实体关系或用于   OneToMany实体关系使用连接表,映射键列   在联接表中

对于joinColumn和inverseJoinColumn,referencedColumn名称将默认为引用表的主键列(construction_id,paper_id),因此您不必指定这些名称。