使用JPA从java地图对象自动生成表的自定义列名

时间:2015-07-28 08:42:31

标签: java hibernate jpa

我有包含两个实体的地图的实体。 第一个是问题类是关键。作为答案类的第二个实体是一个值。

这是实体代码:

@Entity
public class SurveyForm {
    @OneToMany
    public Map<SurveyFormQuestion, SurveyFormAnswer> questionAndAnswer;
}

JPA / Hibernates生成两个MySql表:

首先: SurveyForm ,这是一个空洞的事实。

第二名: SurveyForm_SurveyFormAnswer ,如下所示:

SurveyForm_id           bigint(20)          SurveyForm -> id         
questionAndAnswer_id    bigint(20)          SurveyFormAnswer -> id       
questionAndAnswer_KEY   bigint(20)          SurveyFormQuestion -> id 

我想以某种方式声明表格的名称: SurveyForm_SurveyFormAnswer 的列,而不是

  • questionAndAnswer_id我希望:answer
  • questionAndAnswer_KEY我希望:question

我的问题是:

这是否可以通过JPA/Hiberate以及如何做到这一点。

请帮忙

EDIT 为了澄清,我在这里发布了工作解决方案:

@Entity
public class SurveyForm {
    @OneToMany
    @MapKeyJoinColumn(name = "question_id")
    @JoinTable(joinColumns=@JoinColumn(name="answer_id"))
    public Map<SurveyFormQuestion, SurveyFormAnswer> questionAndAnswer;
}

2 个答案:

答案 0 :(得分:1)

您可以使用@MapKeyJoinColumn@JoinColumn

@Entity
public class SurveyForm {
    @OneToMany
    @MapKeyJoinColumn(name = "question")
    @JoinTable(joinColumns = @JoinColumn(name="answer"))
    public Map<SurveyFormQuestion, SurveyFormAnswer> questionAndAnswer;
}

答案 1 :(得分:-1)

我的代码不是100%,但如果您希望使用JPA命名自定义表,则可以使用@Table@Column注释指定它们,例如:< / p>

@Entity
@Table(name = "SurveyFormQuestion")
public class SurveyFormQuestion{

    @Column(name = "question")
    public String question;
}

我希望这会有所帮助并回答你的问题,试着稍微解决一下。