Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы. / 4 сообщений из 4, страница 1 из 1
18.04.2016, 13:59
    #39218134
Alex123F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы.
подскажите в чем может быть проблема:

есть 2 таблицы Master , Detail. PK(Master) = FK (Detail).

в Entity , Detail-таблицы связь выглядит так:

Код: java
1.
2.
3.
@JoinColumn  (name = "MasterGUID", referencedColumnName = "MasterGUID")
@ManyToOne  
 private Master masterGUID;


добавляю запись в Master. потом добавляю запись или несколько в Detail соответственно с ключом с таблицы мастер.
пробую удалить записи.
при удалении возникает ошибка с сообщением:
During synchronization a new object was found through a relationship that was not marked cascade PERSIST.

перезапускаю приложение, удаление происходит без ошибки.
...
Рейтинг: 0 / 0
18.04.2016, 14:13
    #39218152
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы.
Alex123F,

В ORM вы оперируете сущностями а не записями. Поэтому что у именно подразумевается под "добавляю запись". Не понятно.
Не понятно так же происходит вышеописанное в одной сессии или в разных.

Сама ошибка обозначает что в сессии есть объект с дефолтным значением id, которое ORM распознал как не сохраненную сущность.
Опять же ничего не сказано о том ассоциация двунаправленная или нет.
Если нет, то в сессии у вас есть Detail с дефолтным id. ORM его пытается сохранить, потому что id этот то признак по которому ORM понимает связана ли сущность с записью в БД.
Соответственно у Details без id, нашелся Master без id. Который бы при персисте хорошо бы тоже заперсистить. Но так как каскад не указан, то ORM об этом бодро рапортует.

Код что ли покажите.
...
Рейтинг: 0 / 0
18.04.2016, 14:20
    #39218163
Atum1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы.
Alex123Fподскажите в чем может быть проблема:

есть 2 таблицы Master , Detail. PK(Master) = FK (Detail).

в Entity , Detail-таблицы связь выглядит так:

Код: java
1.
2.
3.
@JoinColumn  (name = "MasterGUID", referencedColumnName = "MasterGUID")
@ManyToOne  
 private Master masterGUID;


добавляю запись в Master. потом добавляю запись или несколько в Detail соответственно с ключом с таблицы мастер.
пробую удалить записи.
при удалении возникает ошибка с сообщением:
During synchronization a new object was found through a relationship that was not marked cascade PERSIST.

перезапускаю приложение, удаление происходит без ошибки.

Напишите Junit тест

И приложите к топику .
...
Рейтинг: 0 / 0
23.04.2016, 20:44
    #39223193
Alex123F
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы.
попытался еще раз обрисовать ситуацию.
структура таблиц : A(Master)->B(Details) ; B(Master)->C(Details) :

проблема : не понял еще как удалять записи с таблиц которые связаны между собой через PK-FK.

Таблица "A" - Мастер для Таблицы "B".
Кликаю на таблице "A" -получаю Item, вставляю его в Таблицу "B".
Primary ключ с Таблицы "A" идет в запись таблицы "B".
потом в цикле вставляю несколько записей в Таблицу "C".
Таблица "B" - Мастер для Таблицы "C".
в Каждую запись в Таблице "C" идет соответствующий ключ с Таблицы "B".

Все что нужно - удалить все только что вставленное одним кликом.

Выделяю тот же Item в Таблице "A", кликаю кнопку на удаление.
сначала удаляются записи с таблицы "C" как коллекция с Таблицы "B".
Потом удаляется соответствующая запись с Таблицы "B".
Все проходит но только после перезапуска приложения.
Если попытаться удалить сразу после Insert то самая "нижняя" таблица "C" "проскакивает",
потому что коллекця таблицы "B" с записями с Таблицы "C" - пустая. потом идет попытка удалить запись с таблицы "B" и соответственно Exception.
если перезапустить приложение то коллекция таблицы "B" заполнена и удаление происходит корректно.

вырезки с Entyty‘s:

Код: 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.
35.
36.
37.
38.
39.
TEntityTableA
   @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 36)
    @Column(name = "Table_A_ID")
    private String table_A_ID;

  @OneToMany(mappedBy = "table_A_ID")
    private Collection<TEntityTableB> tEntityTableBCollection;
-----------------------------------------------------------------------------
TEntityTableB
    @Id   
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 36)
    @Column(name = "Table_B_ID")
    private String table_B_ID;

@JoinColumn(name = "Table_A_ID", referencedColumnName = "Table_A_ID")
@ManyToOne 
private  TEntityTableA table_A_ID;

@OneToMany(mappedBy = "table_B_ID")
    private Collection<TEntityTableB> tEntityTableCCollection;
------------------------------------------------------------------------------------------
TEntityTableC
    @Id
    @Basic(optional = false)
    @NotNull
    @Size(min = 1, max = 36)
    @Column(name = "Table_C_ID")
    private String  table_B_ID;
    @Size(max = 25)
    @Column(name = "Cell")
    private String cell;
    @JoinColumn  (name = "Table_B_ID", referencedColumnName = "Table_B_ID")
    @ManyToOne 
    private TEntityTableB table_B_ID;



схема добавления и удаления записей :

Код: 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.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
// Entities-Injection fort 3 Tables

@EJB  
     TableB_Bean_IF TableB_Bean;
@EJB  
     TableA_Bean_IF TableA_Bean;
@EJB  
     TableC_Bean_IF TableC_Bean;
//---------------------------------------------------------------------

//INSERT

//create Record in Table B with selected PK from Table A : Table A is master for Table B
// Create Record in Table C with selected PK from Table B : Table B is Master for Table A

container_Table_A = new BeanItemContainer<TEntityTableA>(TEntityTableA.class, getallRecordsTableA)   //container for all records from Table A
Item_Table_A = containerTableA.getItem(event.getItemId());  // Current Item from Table A from Click-Event 

    TEntityTableB Insert_NewRec_Table_B = new TEntityTableB();    //prepearing Insert for Table B         
    Insert_NewRec_Table_B.set_TableA_ID(ItemTableA.getBean());   //   Primary Key from Table A to Table B  as FK
    TableB_Bean.create(Insert_NewRec_Table_B);                  //Insert to Talbe B 
    Item_Table_A.getBean().get_RecodsCollection_for_Table_B().add(Insert_NewRec_Table_B);  //Inserted Item to collection of Records from Table B in Table A


//for (TKeywordsTable key : getallkeys) {   //some loop for insert

            TEntityTableC Insert_NewRec_Table_C = new TEntityTableC();      //prepearing Insert for Table B 

            Insert_NewRec_Table_C.set_TableB_ID(Insert_NewRec_Table_B);    //   Primary Key from Table A to Table B as FK
            Insert_NewRec_Table_B.get_RecordsCollection_for_Table_C().add(Insert_NewRec_Table_C);  //Inserted Item to collection of Records from Table C in Table B
            TableC_Bean.create(Insert_NewRec_Table_C);   //Insert to Talbe C 

             TableC_Bean.flush();
             TableB_Bean.flush();
//             TableA_Bean.flush();         
             
//    }

//----------------------------------------------------------------------------------------------
//DELETE: 

try {
    
            if (Item_Table_A != null){
             for ( TEntityTableB condit : Item_Table_A.getBean().get_RecordsCollection_for_Table_B()){

               for (TEntityTableC kw : condit.get_RecordsCollection_for_Table_C()) {
               TableC_Bean.remove(kw);
               }
             TableC_Bean.getCollection_for_Table_C().clear();
            TableB_Bean.remove(condit);
          }             
        }



просьба знающим, обьясните как удалять записи в подобной структуре A(Master)->B(Details) ; B(Master)->C(Details) :
-обычнно через циклы;
- как удалять каскадом.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы. / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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