Java 具有多个映射和相同值类型的Hibernate架构生成错误?

Java 具有多个映射和相同值类型的Hibernate架构生成错误?,java,hibernate,postgresql,jakarta-ee,jpa,Java,Hibernate,Postgresql,Jakarta Ee,Jpa,Hibernate(Core{4.2.7.SP5-redhat-1},使用方言postgresql82方言)正在生成一个我不理解的模式,当我认为不应该时,它失败了。我得到的例外是 ERROR: ERROR: null value in column "aggregategroupmap_id" violates not-null constraint Detail: Failing row contains (1, 2, BILLPROGRESS, null, null). 这是真的,因为

Hibernate(Core{4.2.7.SP5-redhat-1},使用方言postgresql82方言)正在生成一个我不理解的模式,当我认为不应该时,它失败了。我得到的例外是

ERROR: ERROR: null value in column "aggregategroupmap_id" violates not-null constraint
  Detail: Failing row contains (1, 2, BILLPROGRESS, null, null).
这是真的,因为我没有尝试在另一列中插入任何内容。我认为我不应该这样做,因为这些列引用了两个不同的地图

这是我的主要课堂

import java.io.Serializable;
import java.util.*;

import javax.persistence.*;

@SuppressWarnings("serial")
@Entity public class MyClass implements Serializable {
    @Id @GeneratedValue private Long id;

    @OneToMany(cascade={CascadeType.ALL})
    private Map<String, GroupInfo> aggregateGroupMap; 
    @OneToMany(cascade={CascadeType.ALL})
    private Map<String, GroupInfo> computationGroupMap;

    public MyClass() {
         aggregateGroupMap = new TreeMap<String, GroupInfo>(); 
         computationGroupMap = new TreeMap<String, GroupInfo>();
    }

    public Map<String, GroupInfo> getAggregateGroupMap() {
         return aggregateGroupMap;
    }
    public Map<String, GroupInfo> getComputationGroupMap() {
         return computationGroupMap;
    }

}

我尝试添加@Column(nullable=true),但没有任何区别。有什么建议吗?

尝试添加
@JoinColumn
属性

@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name = "aggregateGroupMapId", nullable = true)
private Map<String, GroupInfo> aggregateGroupMap; 
@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name = "computationGroupMapId", nullable = true)
private Map<String, GroupInfo> computationGroupMap;
@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name=“aggregateGroupMapId”,null=true)
私有地图聚合组地图;
@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name=“computationGroupMapId”,nullable=true)
私有地图;
此外,还应该检查hibernate中的地图。也许,在那里你会发现更适合你的问题。

@JoinTable(name=”“)
成功了

@OneToMany(cascade={CascadeType.ALL})
@JoinTable(name="session_aggregategroupmap")
private Map<String, GroupInfo> aggregateGroupMap; 
@OneToMany(cascade={CascadeType.ALL})
@JoinTable(name="session_computationgroupmap")
private Map<String, GroupInfo> computationGroupMap; 
@OneToMany(cascade={CascadeType.ALL})
@JoinTable(name=“session\u aggregategroupmap”)
私有地图聚合组地图;
@OneToMany(cascade={CascadeType.ALL})
@JoinTable(name=“session\u computationgroupmap”)
私有地图;

可能与此无关,但Hibernate真的没有比支持Postgres 8.2更先进的东西了吗?我不知道。但Postgres 8.2早已过时,被遗忘,自那以后,有一些变化可能会影响Hibernate。
create table MyClass_GroupInfo (
    MyClass_id int8 not null,
    computationGroupMap_id int8 not null,
    computationGroupMap_KEY varchar(255),
    aggregateGroupMap_id int8 not null,
    aggregateGroupMap_KEY varchar(255),
    primary key (MyClass_id, aggregateGroupMap_KEY)
);
@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name = "aggregateGroupMapId", nullable = true)
private Map<String, GroupInfo> aggregateGroupMap; 
@OneToMany(cascade={CascadeType.ALL})
@JoinColumn(name = "computationGroupMapId", nullable = true)
private Map<String, GroupInfo> computationGroupMap;
@OneToMany(cascade={CascadeType.ALL})
@JoinTable(name="session_aggregategroupmap")
private Map<String, GroupInfo> aggregateGroupMap; 
@OneToMany(cascade={CascadeType.ALL})
@JoinTable(name="session_computationgroupmap")
private Map<String, GroupInfo> computationGroupMap;