Pan*_*sis 6 mysql annotations hibernate jpa mysql-error-1170
这是我的模型的一部分:
@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
}
Run Code Online (Sandbox Code Playgroud)
我使用@Lob注释,因为map"contents"的值可能很大.请注意,我不关心映射"contents"的键如何映射到数据库.我只是找不到一种方法来指定@Lob注释应该只应用于地图的值.
虽然Entry.titles没有问题地映射到数据库,但Entry.contents却没有.没有创建数据库表,MySQL/Hibernate抱怨:
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
Run Code Online (Sandbox Code Playgroud)
任何想法都表示赞赏!
这绝对是Hibernate中的一个错误.JPA 2.0规范明确指出@Lob在这种情况下应该应用于map值:
该
Lob注释可与结合使用Basic的注释或与ElementCollection[100]注释当元素集合值是基本类型.
...[100]如果元素集合是Map,则这适用于地图值.
显而易见的解决方法包括使用@MapKeyColumn(columnDefinition = "...")或使用@Embeddable作为值的包装器来定义列类型.
此错误似乎没有报告,随时报告它:Hibernate JIRA.
| 归档时间: |
|
| 查看次数: |
2654 次 |
| 最近记录: |