我有两个实体类:
@Entity
@Table(name = "STAT_SETS")
public class StatisticSet extends ClientServerSharedObject {
@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.EAGER, mappedBy="statSet")
@MapKey(name = "name")
@MapKeyEnumerated(EnumType.STRING)
private Map<AbilityName, Ability> abilities = new EnumMap<>(AbilityName.class);
public StatisticSet(Race race) {
for (AbilityName abilityName : AbilityName.values()) {
abilities.put(abilityName, new Ability(abilityName, getModifier()));
}
}
}
@Entity
@Table(name = "ABILITIES")
public class Ability extends ClientServerSharedObject {
@ManyToOne
@JoinColumn(name = "STAT_SET_ID", nullable = false)
private StatisticSet statSet;
}
我正在努力坚持一个
StatisticSet
,我得到了这个错误:
org.hibernate.PropertyValueException: not-null property references a null or transient value : org.package.Ability.statSet
现在,我正在JavaSE中使用Hibernate和ApacheDerby,以及资源和本地事务。当我在带有JTA的JavaEE容器中使用它时,它工作得很好。Hibernate知道如何从
Ability
当它被添加到
统计集
.
为什么会这样?这与JTA的缺乏有关吗?这个
persist()
发生在
begin()
和
commit()
指实体交易。我可以修复它吗,还是必须在java SE中手动设置双向链接,如下所示:
abilities.put(abilityName, newAbility);
newAbility.setStatSet(this);