@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的长度(不是密钥),我如何更改地图值的长度限制?
答案 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)
);