2015-09-25 68 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) 
);