首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >映射@Lob值映射

映射@Lob值映射
EN

Stack Overflow用户
提问于 2011-01-24 02:57:41
回答 2查看 3.2K关注 0票数 6

这是我的模型的一部分:

代码语言:javascript
复制
@Entity
public class Entry
{
    @Id @GeneratedValue
    private long identifier;

    @ElementCollection
    @Column(nullable = false)
    private Map<String, String> titles;

    @ElementCollection
    @Column(nullable = false)
    @Lob
    private Map<String, String> contents;

    // Getters and setters, other fields and methods
}

我使用@Lob注释是因为map "contents“的值可能很大。请注意,我并不关心映射"contents“的键如何映射到数据库。我只是找不到一种方法来指定@Lob注释应该只应用于map的值。

虽然Entry.titles映射到数据库没有问题,但Entry.contents没有问题。没有创建数据库表,MySQL/Hibernate抱怨:

代码语言:javascript
复制
Unsuccessful: create table myblog.Entry_contents (Entry_identifier bigint not null, contents longtext not null, contents_KEY longtext, primary key (Entry_identifier, contents_KEY)) type=InnoDB
BLOB/TEXT column 'contents_KEY' used in key specification without a key length

任何想法都很受欢迎!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-24 04:06:13

这绝对是Hibernate中的一个bug。JPA2.0规范明确指出,在这种情况下,应该将@Lob应用于map值:

当元素集合值是基本类型时,

Lob注释可以与Basic注释或ElementCollection100注释一起使用。

..。

100如果元素集合是Map,则这适用于映射值。

显而易见的变通方法包括使用@MapKeyColumn(columnDefinition = "...")定义列类型或使用@Embeddable作为值的包装器。

此外,这个错误似乎没有报告,请随时报告它:Hibernate JIRA

票数 6
EN

Stack Overflow用户

发布于 2013-11-04 21:42:41

此错误已在Hibernate 4.2.6中修复

https://hibernate.atlassian.net/browse/HHH-8472

针对早期版本的解决方法:

代码语言:javascript
复制
@MapKeyType(@Type(type = "java.lang.String"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4775752

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档