В Java SE: свойство not-null ссылается на нулевое или временное значение - PullRequest
0 голосов
/ 23 декабря 2018

У меня есть два класса сущностей:

@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

Сейчас я использую Hibernate с Apache Derby в Java SE с транзакциями RESOURCE_LOCAL.Это работало нормально, когда я использовал его в контейнере Java EE с JTA.Hibernate знал, что нужно создать ссылку из Ability, когда она была добавлена ​​в список в StatisticSet.

Почему это происходит?Это как-то связано с отсутствием JTA?persist() происходит между begin() и commit() EntityTransaction.Могу ли я это исправить, или мне всегда придется вручную устанавливать ссылку в обоих направлениях в java SE примерно так:

abilities.put(abilityName, newAbility);
newAbility.setStatSet(this);

1 Ответ

0 голосов
/ 23 декабря 2018

Перед сохранением Abitlity безопасно statSet эта способность имеет первую.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...