[英]In Java SE: not-null property references a null or transient value
我有以下兩個實體類:
@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
現在,我在Java SE中將Hibernate與Apache Derby一起使用,並帶有RESOURCE_LOCAL事務。 當我在帶有JTA的Java EE容器中使用它時,此方法工作正常。 當將Hibernate添加到StatisticSet
的列表時,Hibernate知道要從Ability
創建回鏈接。
為什么會這樣? 它與缺少JTA有什么關系嗎? persist()
發生在EntityTransaction的begin()
和commit()
之間。 我可以修復它,還是總是必須在Java SE中雙向手動設置鏈接,如下所示:
abilities.put(abilityName, newAbility);
newAbility.setStatSet(this);
在保存Abitlity
安全statSet
之前,該能力已具有。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.