是否可以使用列作为散列图的键来创建一对一映射?

Is it possible to create a one-to-one mapping with the columns as keys for a hashmap?

假设我有以下 class,其中所有字段都是整数:

@Entity
public class Bar implements Serializable { 
    @Id
    private Integer id;

    @Basic
    private Integer field1;

    @Basic
    private Integer field2;

    //Constructor & getters/setters omitted
}

现在我希望有另一个 class 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

这样做的原因是我有一个底层枚举,枚举的每个值都应该是一个列,然后在将其作为 Map 获取之后我可以轻松访问每个字段,因为我已经知道属性名称。

在我看来,基础表看起来像这样: Link to image, as I am not allowed to embed yet.

这样的事情可能吗?它需要什么样的注释?我之前在 Foo 中尝试过如下操作,但它报告说不应将一对一属性用作映射,所以我可能以错误的方式思考这个问题。

@OneToOne(mappedBy="Bar")
@MapKey(name="Id")
private HashMap<String, Integer> barMap;

致所有未来的访客:

我找不到任何方法来解决这个问题,我意识到这可能是因为它不好 design/practice。相反,我最终重新设计了我的 Bar class 以便它的字段现在是枚举和值,基本上是转置 table。 Foo class 然后只是有一个 Map<Enum, Bar>。注释是:

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;