powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы.
4 сообщений из 4, страница 1 из 1
Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы.
    #39218134
Фотография 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.

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

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

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

Код что ли покажите.
...
Рейтинг: 0 / 0
Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы.
    #39218163
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы.
    #39223193
Фотография Alex123F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попытался еще раз обрисовать ситуацию.
структура таблиц : 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
4 сообщений из 4, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Ошибка : ...relationship was not marked cascade PERSIST при удалении записей с таблицы.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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