我已经使用注释
@ElementCollection
@CollectionTable(name = "story_tag", joinColumns = @JoinColumn(name = "story_id"))
@Column(name = "tag")
private Set<Tag> tags;
其中Tag是一个枚举,每个值都使用转换器存储为整数类型。
@Converter(autoApply = true)
public class TagConverter implements AttributeConverter<Tag, Integer> {
//convertToDatabaseColumn and convertToEntityAttribute properly implemented
}
如上所述,它可以工作。但是我正在从模型中删除注释。使用hibernate xml(不是jpa xml,可以使用jpa轻松完成)。 但是,我还没有找到解决方案。这是我尝试过的方式:
<set name="tags" table="story_tag">
<key column="story_id"></key>
<element column="tag" type="com.test.TagConverter"></element>
</set>
此外,由于休眠模式使用 converted :: 前缀将转换器应用于属性映射,因此我尝试使用:
<set name="tags" table="story_tag">
<key column="story_id"></key>
<element column="tag" type="converted::com.test.TagConverter"></element>
</set>
它们都不起作用,都抛出
MappingException: Could not determine type for: com.test.TagConverter
有什么主意吗?我没有使用jpa xml,因为它没有休眠映射提供的几种功能。