Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/381.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate:HashMap<;实体A、实体B>;注释映射_Java_Hibernate_Annotations_Hashmap_Jpa 2.0 - Fatal编程技术网

Java Hibernate:HashMap<;实体A、实体B>;注释映射

Java Hibernate:HashMap<;实体A、实体B>;注释映射,java,hibernate,annotations,hashmap,jpa-2.0,Java,Hibernate,Annotations,Hashmap,Jpa 2.0,我对冬眠还比较陌生,但我遇到了这个问题,可能是个简单的问题,但我还是无法解决它。我想映射包含JavaMap字段的实体,它(当然)在这个持久化的POJO对象中的行为应该类似于JavaMap。为了问题的简单性,我尽可能地简化了实体,这样主要的问题仍然可以被识别 因此,总共有3个实体: EntityA(用作地图中的键): EntityB(用作映射中的值): MainEntity(包含映射字段): 这可以有效地防止此映射对映射值具有相同的对象(EntityB)(不仅对于一个MainEntity映射,而且

我对冬眠还比较陌生,但我遇到了这个问题,可能是个简单的问题,但我还是无法解决它。我想映射包含JavaMap字段的实体,它(当然)在这个持久化的POJO对象中的行为应该类似于JavaMap。为了问题的简单性,我尽可能地简化了实体,这样主要的问题仍然可以被识别

因此,总共有3个实体:

EntityA(用作地图中的键): EntityB(用作映射中的值): MainEntity(包含映射字段): 这可以有效地防止此映射对映射值具有相同的对象(EntityB)(不仅对于一个MainEntity映射,而且对于所有持久化映射)。所以我不能将同一个EntityB作为映射中不同键(EntityA)的值,并将其持久化。我总是会收到有关此约束的错误信息:

ERROR: duplicate key value violates unique constraint "uk_5bbk6m10bx6ru2wh2gtrlpbqr" Detail: Key (entity_b)=(3) already exists.
我尝试过(如上所示)使用unique=false来表示inverseJoinColumns,但没有成功。我还尝试了其他可能比这更错误的东西,所以我不会在这里发布它们:-/

我还将在这里发布期望的图片,因此我要更清楚地说明这一点:

所以。。我做错了什么?为什么映射的HashMap不能像简单的java映射那样工作?起初,我认为这一定是显而易见的,因为在hibernate中映射hashmap的任何人都会认为映射的行为是正确的。但后来我发现我在某处或其他任何地方都找不到我的答案


提前感谢。

以防有人遇到此问题或类似问题。。我终于找到了解决办法。 这实际上是在另一个SO问题中解释的,但我最初无法找到它

这只是将@OneToMany更改为@ManyToMany注释的问题:

@Entity
@Table(name = "ENTITY_B")
public class EntityB implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;

@Column
private String valueB;
}
@Entity
@Table(name = "MAIN_ENTITY")
public class MainEntity implements Serializable{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column
private Long id;

@OneToMany(fetch=FetchType.EAGER)
@JoinTable(name="ENTITYA_ENTITYB",
    joinColumns=@JoinColumn(name="ENTITY_MAIN"),
    inverseJoinColumns=@JoinColumn(name="ENTITY_B", unique=false),
    uniqueConstraints=@UniqueConstraint(columnNames = {"ENTITY_MAIN", "ENTITY_A"}))
@MapKeyJoinColumn(name="ENTITY_A")
private Map<EntityA, EntityB> entityMap;
}
ALTER TABLE entitya_entityb ADD CONSTRAINT uk_5bbk6m10bx6ru2wh2gtrlpbqr UNIQUE(entity_b);
ERROR: duplicate key value violates unique constraint "uk_5bbk6m10bx6ru2wh2gtrlpbqr" Detail: Key (entity_b)=(3) already exists.