JPA Map <string,string>对地图值长度的限制?

时间:2015-09-25 17:05:36

标签: java jpa

@Entity
@Table(name="Foo")
public class FooEntity {
    @Id
    private String name;
    ...
    @ElementCollection(fetch=FetchType.EAGER)
    private Map<String, String> properties = new HashMap<>();
    ...
}

我有一个类似于上面所示的JPA实体。运行上面的内容时,我得到一个“属性”表,其中地图值列的默认最大长度为255个字符。如果我想支持(例如)高达64K的长度(不是密钥),我如何更改地图值的长度限制?

1 个答案:

答案 0 :(得分:0)

您可以使用以下映射:

@Entity
@Table
public class Foo {
    // ID, other properties, ...

    @ElementCollection
    @MapKeyColumn(name="key", length=100)
    @Column(name="value", length=512)
    @CollectionTable(name="properties", joinColumns=@JoinColumn(name="foo_id"))
    private Map<String, String> properties;
}

有趣的部分是@Column注释,它允许您自定义值列的映射。

运行模式导出时,此映射将导致以下DDL:

CREATE TABLE properties (
    foo_id INT8 NOT NULL,
    value VARCHAR(512),
    key VARCHAR(100) NOT NULL,
    PRIMARY KEY (user_id, key)
);