2015-09-25 70 views
1
@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的值(不是关键字),那么如何更改地图值的长度限制?对映射值长度的JPA映射<String,String>限制?

回答

0

您可以使用下面的映射:

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

    @ElementCollection 
    @MapKeyColumn(name="key", length=100) 
    @Column(name="value", length=512) 
    @CollectionTable(name="properties", [email protected](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) 
);