gpt4 book ai didi

java - 具有多个映射和相同值类型的 Hibernate 模式生成错误?

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

Hibernate(核心 {4.2.7.SP5-redhat-1},使用方言 PostgreSQL82Dialect)正在生成一个我不理解的模式,并且在我认为不应该的时候失败了。我得到的异常(exception)是

ERROR: ERROR: null value in column "aggregategroupmap_id" violates not-null constraint
Detail: Failing row contains (1, 2, BILLPROGRESS, null, null).

这是真的,因为我没有尝试在另一列中插入任何内容。我认为我不必这样做,因为这些列引用了两个不同的 map 。

这是我的主要 MyClass 类。

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;
}

}

这是第二个类,被第一个类引用。

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

import javax.persistence.*;

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

@ElementCollection
@OrderColumn
private List<String> groupLabels;
@ElementCollection
@OrderColumn
private List<String> groupDescriptions;

public GroupInfo() {
groupLabels = new ArrayList<String>();
groupDescriptions = new ArrayList<String>();
}

public List<String> getGroupLabels() {
return groupLabels;
}
public List<String> getGroupDescriptions() {
return groupDescriptions;
}
}

此类尝试持久化对象:

import java.util.*;

import javax.persistence.*;

public class TestIt {

public static void main(String... args) throws Exception {
EntityManagerFactory emf = Persistence.createEntityManagerFactory("JpaTest");
EntityManager em = emf.createEntityManager();

MyClass myClass = new MyClass();
GroupInfo groupInfo = new GroupInfo();
groupInfo.getGroupLabels().addAll(new ArrayList<String>(Arrays.asList(new String[] {"SKEWNESS"})));
myClass.getComputationGroupMap().put("BILLPROGRESS", groupInfo);

EntityTransaction tx = em.getTransaction();
tx.begin();
em.persist(myClass);
tx.commit();

em.close();
}

}

据我所知,这是问题表:

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)
);

我尝试添加 @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;

你还应该检查 hibernate documentation关于 map 。也许,在那里您会找到更适合您的问题的内容。

关于java - 具有多个映射和相同值类型的 Hibernate 模式生成错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25960847/

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