我的简单实体类看起来像这样 -
Entity
@Table(name ="my_class", uniqueConstraints = {@UniqueConstraint(name = "AAndBAndCAndD", columnNames = { "A","B","C","D"}) })
public class MyClass implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private Integer id;
@Column(name = "A")
private String A;
@Column(name = "B")
private String B;
@Column(name = "C")
private Integer C;
@Column(name = "D")
private Integer D;
@Column(name = "E")
private Long E;
@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
@CollectionTable(name="values_table", joinColumns = @JoinColumn(name="my_class_id", referencedColumnName = "id"))
@Column(name="values")
private Set<String> values;
And I created 2 tables like below -
CREATE TABLE some_table (
id serial PRIMARY KEY,
A character varying(10) NOT NULL,
B character varying(10) NOT NULL,
C int NOT NULL,
D int NOT NULL,
E bigint,
UNIQUE (A,B,C,D)
);
CREATE TABLE values_table (
some_table_id int NOT NULL,
values VARCHAR(500),
constraint fk_values_table_some_table
foreign key (some_table_id)
REFERENCES some_table(id)
);
当我将其作为服务的一部分运行时,我看到以下错误
引起:org.hibernate.MappingException:集合外键映射的列数错误:MyClass.values类型:组件[id,id] 在 org.hibernate.mapping.Collection.validate(Collection.java:309) 在 org.hibernate.mapping.Set.validate(Set.java:40) 在 org.hibernate.cfg.Configuration.validate(Configuration.java:1364) 在 org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1851) 在org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl $4.perform(EntityManagerFactoryBuilderImpl.java:852) 还有26个
我尝试了不同的方法,但无法修复错误。谁能帮我找出上面的代码有什么问题吗?班级名称
我尝试将 Id 字段添加到值表中,但没有成功。我不明白外键映射有什么问题。
快速发现代码中的以下错误:
MyClass
应映射到表 some_table
但不是 my_class
some_table_id
但不是 my_class_id
。因此将代码更改为以下内容应该可以解决问题:
@Entity
@Table(name ="some_table")
public class MyClass {
@ElementCollection(targetClass = String.class, fetch = FetchType.EAGER)
@CollectionTable(name="values_table", joinColumns = @JoinColumn(name="some_table_id",referencedColumnName = "id"))
@Column(name="values")
private Set<String> values;
}