Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Удаление всех Child у parent / 4 сообщений из 4, страница 1 из 1
15.06.2012, 13:04:51
    #37839457
denis11111
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление всех Child у parent
Есть два класа:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
@Entity
@Table(name = "operations")
public class Operations implements Serializable {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Integer id;
    @Column(name = "name")
    private String name;
    @Column(name = "description")
    private String description;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "operation")
    private List<Operjrnl> operjrnlList;
.........
}

@Entity
@Table(name = "users")
public class Users implements Serializable {
    @Id
    @Column(name = "LOGIN")
    private String login;
    @Column(name = "PASSHASH")
    private String passhash;
    @JoinColumn(name = "STAFF", referencedColumnName = "PERSON_ID")
    @ManyToOne(optional = false)
    private Staff staff;
    @JoinColumn(name = "ROLE_ID", referencedColumnName = "ROLE_ID")
    @ManyToOne(optional = false)
    private Roles roleId;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "user")
    private List<Operjrnl> operjrnlList;
..................
}



Почему когда я пишу следующий код:

Код: java
1.
2.
selectedUser.getOperjrnlList().clear(); //Чистим список операций по пользователю
um.edit(selectedUser);


Записи из БД не удаляются?

Хотя если додавать елемент в список, то от нормально добавляется в БД:
Код: java
1.
2.
selectedUser.getOperjrnlList().add(operation);
um.edit(selectedUser);
...
Рейтинг: 0 / 0
15.06.2012, 13:16:59
    #37839482
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление всех Child у parent
Что такое um.edit() ?
Какого класса объект реализует спискок?
Какой JPA провайдер?

Если используется Hibernate, то при загрузке, вы получите Persistent коллекцию, которую реализует Хибер. Такая коллекция хранит в себе изначальное состояние, с которым может сравнить новое состояние, и удалить лишнее.

Если коллекция заменяется, на ArrayList, например. То хибер никак не узнает что что-то из него удаляли. Такая проверка требует слишком много дополнительных SQL запросов, если её реализовать.
...
Рейтинг: 0 / 0
15.06.2012, 13:18:32
    #37839483
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление всех Child у parent
Кроме этого. Удаление из коллекции не обозначает автоматического удаления объекта. Оно обозначает разрыв ассоциации.
...
Рейтинг: 0 / 0
15.06.2012, 13:20:29
    #37839490
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Удаление всех Child у parent
Если нужно чтобы при разрыве ассоциации удалялись и сами дочерние объекты, посмотри
CascadeType.DELETE_ORPHAN и orphanRemoval = true
http://stackoverflow.com/questions/306144/jpa-cascadetype-all-does-not-delete-orphans

т.е. если при разрыве ассоциации, дочерний объект больше не нужен, то он будет ещё и удалён.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Удаление всех Child у parent / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]