JPA ElementCollection外键Map错误

p4rjhz4m  于 8个月前  发布在  其他
关注(0)|答案(1)|浏览(59)

我的简单Entity类看起来像这样-

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="some_table_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:集合外键Map的列数错误:MyClass.values类型:component[id,id] at org.hibernate.mapping.Collection.validate(Collection.java:309)at org.hibernate.mapping.Set.validate(Set.java:40)at org.hibernate.cfg.Configuration.validate(configuration. java:1364)at org.hibernate.cfg.Configuration.buildSessionFactory(configuration. java:1851)at org. hibernate. jpa. boot. internal. configuration. buildManagerFactoryBuilderImpl$4.perform(configuration. FactoryBuilderImpl.java:852)26 more
我尝试了不同的东西,但无法修复错误。谁能帮我找出上面代码的错误?的类的名称
我试图添加一个ID字段的值表,但没有运气。我不明白外键Map有什么问题。

gojuced7

gojuced71#

我想你必须把PRIMARY KEY定义为values_table
下面是代码片段

CREATE TABLE values_table  (
    id serial PRIMARY KEY, -- Add a primary key
    some_table_id int NOT NULL,
    values VARCHAR(500),
    CONSTRAINT fk_values_table_some_table
        FOREIGN KEY (some_table_id) 
        REFERENCES some_table(id)
);

相关问题