您的映射是错误的,因为您尝试对奇异属性使用collection。根据JPA规范(请参见 6.2.1.1规范元模型 部分):
对于z
class声明的每个持久性具有集合值的属性X
,其中元素类型z
为Z
,元模型类必须包含如下声明:
public static volatile SetAttribute<X, Z> z;
但是,Hibernate所期待的,你会使用@ElementCollection
,@OneToMany
或@ManyToMany
协会收集属性。
我建议您对自定义类型使用一些包装器类:
public class StringSet {
private Set<String> stringSet;
// ...
}
public class StringSetConverter implements AttributeConverter<StringSet, String> {
@Override
public String convertToDatabaseColumn(StringSet stringSet) {
// ...
}
@Override
public StringSet convertToEntityAttribute(String dbString) {
// ...
}
}
@Column(name = "GRANTED_PRIVILEGES", nullable = false, length = 4000)
@Convert(converter = StringSetConverter.class)
private StringSet grantedPrivileges;