java – Hibernate:将两列映射到HashMap的键和值

我有一个带有对象的数据库,它有翻译.

有2个表:table具有id和更多属性的对象和具有object_id,language(varchar)和translation(varchar)的表’object_translation’

我想把这个映射到

public class Object {
    private Map<Language, String> translations
}

其中language是代码中的枚举,DB中是字符串.

这可能带注释吗?或者我是否需要创建Collection< QuestionTranslation>或者在DAO中编写我自己的hibernate映射函数(我使用的是spring-data,所以我更喜欢将它作为接口和注释保持良好和干净)

版本:spring-boot 2,提供spring-boot-starter的休眠:

spring boot: <version>2.0.3.RELEASE</version>
<hibernate.version>5.2.17.Final</hibernate.version>
<hibernate-jpa-2.1-api.version>1.0.2.Final</hibernate-jpa-2.1-api.version>

到目前为止我有这个:

@OneToMany
@JoinTable(name = "object_translation", joinColumns = {@JoinColumn(name = "object_id", referencedColumnName = "id")})
@MapKey(name = "language")
@MapKeyEnumerated(EnumType.STRING)
private Map<Language, String> translations;

但是我如何映射价值呢? (澄清:String值应该是DB中的翻译列)

因为我没有主键,理论上这应该是可能的吗?

提前致谢!

最佳答案 我设法修复它=)

你不应该使用@OneToMany.

我用过的:

public class Object {

    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "object_translation",
                 foreignKey = @ForeignKey(value = ConstraintMode.CONSTRAINT, name = "fk_object_translation_object"),
                 joinColumns = @JoinColumn(name = "object_id"))
    @MapKeyColumn(name = "language", nullable = false)
    @MapKeyEnumerated(EnumType.STRING)
    @Column(name = "translation", nullable = false)
    private Map<Language, String> translations;
}
点赞