代码之家  ›  专栏  ›  技术社区  ›  devil0150 lialzm

在JavaSE中:NOTNULL属性引用null或瞬时值

  •  0
  • devil0150 lialzm  · 技术社区  · 7 年前

    我有两个实体类:

    @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);
    
    1 回复  |  直到 7 年前
        1
  •  0
  •   Antoniossss    7 年前

    在存钱之前 Abitlity 安全 statSet 这种能力是第一位的。