如何在Hibernate / JPA中保留EnumMap

赛斯:

我目前正在尝试保留要作为的数据Map
我设法List使它正常工作,但是当我尝试Map使用代替它时@MapKeyEnumerated@MapKey它的行为有点意外。

GuildData.java

@MapKey(name = "feature")
@MapKeyEnumerated(EnumType.STRING)
@OneToMany(targetEntity = GuildFeature.class, mappedBy = "guildData")
private Map<Feature, GuildFeature> features;

GuildFeature.java

@ManyToOne
@JoinColumn(name = "guild_id", nullable = false)
private GuildData guildData;

@Enumerated(EnumType.STRING)
@Column(name = "feature", nullable = false)
private Feature feature;

如果我在运行时之外将条目手动添加到数据库中,然后运行该应用程序,则它可以完美地选择实体。
所有其他表/实体工作完全正常,包括其他List/ OneToMany/ ManyToOne映射。

当实体保留在应用程序中时,在调试时,新GuildFeature的确会出现在中Map,但是所有属性都是其默认Java值,而不是保留的数据;因此,所有属性都是默认值。并且在数据库中没有创建任何行。

有人能指出我在这里可能犯错的正确方向吗?

编辑:
我取决于hibernate-corehibernate-c3p0,两个版本5.4.17.Final

赛斯:

问题是,我会查询GuildData,或创建new GuildData(long)如果不存在,添加新的GuildFeature给它,但我会打电话save只对GuildData

这将使Hibernate保存GuildData和对其所做的任何更改,但不保存对嵌套/关系实体所做的更改。

GuildData.java

/** The features that have been manually configured in this guild. */
@MapKey(name = "feature")
@MapKeyEnumerated(EnumType.STRING)
@OneToMany(targetEntity = GuildFeature.class, mappedBy = "guildData", cascade = CascadeType.ALL)
private Map<Feature, GuildFeature> features;

当我尝试保存时,解决方案是设置cascade = CascadeType.ALL使Hibernate持久GuildFeature保存关系实体()中的更改GuildData

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章