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
其他内容