Java 如何在Map中控制JPA列名

Java 如何在Map中控制JPA列名,java,hibernate,jpa,hibernate-mapping,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 = "ConstructionPa

实体建设

有以下地图:

    @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>();
@列(name=“paper\FK”)
@许多
@JoinTable(inverseForeignKey=@ForeignKey(name=“construction\u FK”)、joinColumns=@JoinColumn(name=“construction\u FK”、ReferenceColumnName=“construction\u FK”)、name=“ConstructionPaperTracks”、inverseJoinColumns=@JoinColumn(name=“paper\u FK”))
私有HashMap tracks_field=newhashmap();
根据我的数据库设计指南,表的构造是纸轨 应具有柱结构、位置和纸张


JPA使用施工id、职位和纸张id

如何指定列名

致意


Heiko

我不确定我是否理解“JPA使用构造id、位置和纸张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;
}
@实体
公共课建设{
@身份证
@列(name=“construction\u id”)
//指定生成策略
私人长id;
@许多
@JoinTable(name=“ConstructionPaperTracks”,
joinColumns=@JoinColumn(name=“construction_FK”),
inverseJoinColumns=@JoinColumn(name=“paper\FK”))
@MapKeyColumn(name=“position”)
私有HashMap文件;
}
您需要指定
@MapKeyColumn
,文档中说明:

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


对于joinColumn和inverseJoinColumn,referencedColumn名称将默认为引用表的主键列(construction\u id,paper\u id),因此您不必指定它们。

JPA使用construction\u id、position和paper\u id意味着,当我使用这些列名时,它可以工作-position是正确的列名,现在我需要construction_FK和paper_FK不起作用意味着,当列名是construction_FK而不是construction_id,paper_FK而不是paper_id时-我的映射不起作用-JPA在部署时投诉。JPA在部署时投诉-并期望列名,我不想要的-构造id和纸张id。当我在表中按照我的意愿命名它们时,hibernate在schama验证阶段抛出一个异常。我不知道你的问题是什么。您需要编辑您的问题以使其更清晰,并发布所有相关信息。我认为问题在于您还定义了一个列名称相同的约束(construction_FK);尝试在
@JoinColumn
中保留construction\u FK,并调用
@ForeignKey
其他内容