簡體   English   中英

在Java SE中:not-null屬性引用一個null或瞬態值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM