我目前正在尝试保留要作为的数据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-core
和hibernate-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] 删除。
我来说两句