Как удалить элементы постоянной карты с помощью jpa - PullRequest
1 голос
/ 03 марта 2012

Я пытаюсь удалить объект, который содержит карту объектов следующим образом:

@Entity
public class TrxReport extends Model {
    @ElementCollection(fetch = FetchType.EAGER)
    @CollectionTable(name = "StatCategory")
    @MapKeyColumn(name = "TrxReport_key", nullable = false)
    @Cascade(value = { CascadeType.ALL })
    public Map<String, TrxStatCategory> categories;

    @Override
    public TrxReport delete(){
        for (AtmPosTrxStatCategory cat : categories.values()) {
            if (cat != null){
                categories.remove(cat.name);
                cat.delete();
            }
        }
        super.delete();
        return this;
    }
}

Однако я всегда получаю ошибку нарушения ограничения, жалуюсь на category_id в таблице StatCategory. Нужно ли удалять с помощью пользовательского запроса или можно сделать так же, как описано выше?

1 Ответ

1 голос
/ 03 марта 2012

Я думаю, что вы получаете ошибку, потому что категории, которые вы пытаетесь удалить, удаляются дважды из-за CascadeType.ALL.Если вы используете orphanRemoval, тогда TrxStatCategory также будет удалено, если они будут удалены из коллекции categories в TrxReport.

1010 *

@Entity
public class TrxReport extends Model {

    @CollectionTable(name = "StatCategory")
    @MapKeyColumn(name = "TrxReport_key", nullable = false)
    @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, orphanRemoval = true)
    public Map<String, TrxStatCategory> categories;

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