当Key是枚举{H 44}时,HashMap到SQL

时间:2017-11-13 13:58:06

标签: java postgresql jpa

我有以下实体类:

public class SportData {
//other attributes

 @Column(name = "POINTS")
    @ElementCollection
    private Map<NBAEvent, Integer> points;
}


public enum NBAEvent {
    THREE_POINT,
    TWO_POINT,
    FREE_THROW,
    //..
}

当我使用ddl-auto: validate生成相应的表时,它会创建NBAEvent(这是k)列,数据类型为整数(points_key int4 NOT NULL)

  1. 如何为points键列生成varchar类型列?
  2. 如果我手动编写像points_key CHARACTER VARYING(255)这样的SQL,它会如何影响?
  3. 我使用Spring引导和Spring JPA,DB是PostgreSQL。

1 个答案:

答案 0 :(得分:0)

当地图的键是枚举时,您还必须添加MapKeyEnumerated注释。

关键是用EnumType.STRING类型声明它。

@ElementCollection
@CollectionTable(name = "colltable")
@MapKeyEnumerated(EnumType.STRING)
@Column(name="POINTS")
private Map<NBAEvent, Integer> map;

否则,根据javadocs,它默认为:javax.persistence.EnumType.ORDINAL。这会在创建ddl时产生整数表。

您可能还需要上面的@CollectionTable注释。