Java 是否可以使用列作为hashmap的键来创建一对一映射?
假设我有一个类,其中所有字段都是整数:Java 是否可以使用列作为hashmap的键来创建一对一映射?,java,hibernate,orm,hibernate-mapping,hibernate-5.x,Java,Hibernate,Orm,Hibernate Mapping,Hibernate 5.x,假设我有一个类,其中所有字段都是整数: @Entity public class Bar implements Serializable { @Id private Integer id; @Basic private Integer field1; @Basic private Integer field2; //Constructor & getters/setters omitted } 现在我希望有另一个类Foo,
@Entity
public class Bar implements Serializable {
@Id
private Integer id;
@Basic
private Integer field1;
@Basic
private Integer field2;
//Constructor & getters/setters omitted
}
现在我希望有另一个类Foo
,它有一个HashMap,其中键是Bar
中具有相应值的字段。也就是说,类似这样的事情:
@Entity
public class Foo implements Serializable {
@Id
private Integer id;
@Basic
private String someString;
@Basic
private Integer someInteger;
@??
private HashMap<String, Integer> barMap;
//Constructor & getters/setters omitted
对未来的访客:
@Id
@Column(name = "id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
@Column(name="enumField", nullable = false)
@Enumerated(EnumType.ORDINAL)
private EnumType enumField;
@Basic
@Column(name="myField")
private int myField = 0;
@ManyToOne
@JoinColumn(name="fooInstance", nullable = false)
private Foo fooInstance;
我找不到任何方法来实现这一点,我意识到这可能是因为它不是好的设计/实践。相反,我最终重新设计了我的Bar
类,使其字段现在成为枚举和值,基本上转换了表。然后,Foo
类就有了一个Map
。注释如下:
Foo:
@OneToMany(mappedBy="fooInstance", cascade = CascadeType.ALL)
@MapKey(name="enumField")
private Map<EnumType, Bar> barMap;
@Id
@Column(name = "id", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer id;
@Column(name="enumField", nullable = false)
@Enumerated(EnumType.ORDINAL)
private EnumType enumField;
@Basic
@Column(name="myField")
private int myField = 0;
@ManyToOne
@JoinColumn(name="fooInstance", nullable = false)
private Foo fooInstance;