gpt4 book ai didi

java - 在访问器上方放置@Id 注释会导致创建元素集合表失败

转载 作者:行者123 更新时间:2023-11-29 05:56:48 24 4
gpt4 key购买 nike

当我运行以下类时:

@Entity
public class SurveyResponse {

@Id
private String assignmentId;

public String getAssignmentId() {
return assignmentId;
}

public void setAssignmentId(String assignmentId) {
this.assignmentId = assignmentId;
}

@ElementCollection
@MapKeyColumn(name="topic")
@Column(name="relevance")
@CollectionTable(name="RelevanceScore", joinColumns=@JoinColumn(name="assignmentId"))
Map<Topic, Relevance> topicRelevance = new HashMap<Topic, Relevance>(); // maps from attribute name to value

public static void main( String[] args ) {
Configuration config = new Configuration();
config.addAnnotatedClass(SurveyResponse.class);
config.configure( "hibernate.cfg.xml" );
new SchemaExport(config).create( true, true );
}

}

它按预期创建表 SurveyResponse 和 RelevanceScore。但是,当我将 @Id 注释放在主键的 getter 上方时...

@Entity
public class SurveyResponse {

private String assignmentId;

@Id
public String getAssignmentId() {
return assignmentId;
}

...

}

...它无法生成表 RelevanceScore。为什么?

最佳答案

简短回答:您必须选择是将注释放在字段上还是放在 getter 上,不能混合使用。

长答案:Hibernate 寻找@Id 注释;如果它在一个字段上,它会查找字段上的所有其他注释,甚至懒得去查看 getter。反之亦然:如果 @Id 注释在 getter 上,则不会考虑您在其他字段上放置的注释。

这就是为什么如果您只在 getAssignment 方法上移动 @Id 注释,则不会生成您的表;您还应该将描述 topicRelevance 字段的所有注释放在其相关的 getter 上。

关于java - 在访问器上方放置@Id 注释会导致创建元素集合表失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11786177/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com