powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Сущности: не создаются связанные записи
6 сообщений из 6, страница 1 из 1
Сущности: не создаются связанные записи
    #37750692
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот есть такие функция:
Код: sql
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.
    protected BigDecimal insert_r(int id, String user_name, int lpucode, String fio, int call_time, int type, String some_comment, int callstatus){

        BigDecimal newid=BigDecimal.ZERO;
        newid=get_max_id();
        if(newid==null){newid=BigDecimal.ZERO;}
        newid=newid.add(BigDecimal.ONE);
        WorkTimeTable wt=new WorkTimeTable();
        //wt.setId(BigDecimal.valueOf((long)5778));
        wt.setId(newid);
        wt.setUserName(user_name);
        wt.setLpucode(BigInteger.valueOf((long)lpucode));
        wt.setFio(fio);
        wt.setCalltime(BigInteger.valueOf((long)call_time));
        wt.setType(BigInteger.valueOf((long)type));
        //wt.setSomeComment(some_comment);
        WorkTimeComments wtc=new WorkTimeComments();
        wtc.setId(BigDecimal.valueOf((long)12));
        wtc.setText(some_comment);
        wtc.setFkId(wt);
        //wtc.s;
        //Collection<WorkTimeComments> gh=new Collection<WorkTimeComments>();
        ArrayList<WorkTimeComments> gh=new ArrayList<WorkTimeComments>();
        gh.add(wtc);
        //wt.
        wt.setWorkTimeCommentsCollection(gh);
        //wt.setSomeCommentId(BigInteger.TEN);
        Date dd=get_oracle_date();
        wt.setCallDate(dd);
        wt.setCallstatus(BigInteger.valueOf((long)callstatus));
        create(wt);
        return newid;
    }


Сущность WorkTimeTable связана с сущностью WorkTimeReasons вот так:
Код: sql
1.
2.
    @OneToMany(mappedBy = "fkId")
    private Collection<WorkTimeReasons> workTimeReasonsCollection;



Если эта строчка:
wt.setWorkTimeCommentsCollection(gh);
Не закомментирована, то вылазиет вот такая ошибка:
Код: sql
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.
Exception in thread "AWT-EventQueue-0" javax.ejb.EJBException: Transaction aborted
	at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5120)
	at com.sun.ejb.containers.BaseContainer.postInvokeTx(BaseContainer.java:4879)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:2039)
	at com.sun.ejb.containers.BaseContainer.postInvoke(BaseContainer.java:1990)
	at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:213)
	at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:79)
	at $Proxy219.update_r(Unknown Source)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie.dispatchToMethod(ReflectiveTie.java:144)
	at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:174)
	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:528)
	at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:199)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1624)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1486)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:990)
	at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:214)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:742)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:539)
	at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2324)
	at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.performWork(ThreadPoolImpl.java:497)
	at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:540)
Caused by: javax.transaction.RollbackException: Transaction marked for rollback.
	at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:473)
	at com.sun.enterprise.transaction.JavaEETransactionManagerSimplified.commit(JavaEETransactionManagerSimplified.java:852)
	at com.sun.ejb.containers.BaseContainer.completeNewTx(BaseContainer.java:5114)
	... 23 more
Caused by: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: EntityPack.WorkTimeComments[ id=12 ].
	at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.discoverUnregisteredNewObjects(RepeatableWriteUnitOfWork.java:302)
	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.calculateChanges(UnitOfWorkImpl.java:695)
	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.commitToDatabaseWithChangeSet(UnitOfWorkImpl.java:1482)
	at org.eclipse.persistence.internal.sessions.UnitOfWorkImpl.issueSQLbeforeCompletion(UnitOfWorkImpl.java:3135)
	at org.eclipse.persistence.internal.sessions.RepeatableWriteUnitOfWork.issueSQLbeforeCompletion(RepeatableWriteUnitOfWork.java:344)
	at org.eclipse.persistence.transaction.AbstractSynchronizationListener.beforeCompletion(AbstractSynchronizationListener.java:157)
	at org.eclipse.persistence.transaction.JTASynchronizationListener.beforeCompletion(JTASynchronizationListener.java:68)
	at com.sun.enterprise.transaction.JavaEETransactionImpl.commit(JavaEETransactionImpl.java:435)
	... 25 more



Вот суть:
Код: sql
1.
Caused by: java.lang.IllegalStateException: During synchronization a new object was found through a relationship that was not marked cascade PERSIST: EntityPack.WorkTimeComments[ id=12 ]


Во время синхронизации был найден новый объект, который не был помечен каскадно PERSIST. Что-то я не понял.

И транзанкция откатывается.
Как это можно исправить?
Что не так?

Должна создаться 1 запись в главной таблице и 1 запись в подчинённой таблице, связанная по FK.
...
Рейтинг: 0 / 0
Сущности: не создаются связанные записи
    #37750724
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000,
если есть каскад, то он должен односторонний, т.е.:
в главном поставить cascade = CascadeType.ALL, в неглавном убрать каскад
?
...
Рейтинг: 0 / 0
Сущности: не создаются связанные записи
    #37750750
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если есть каскад, то он должен односторонний, т.е.:
в главном поставить cascade = CascadeType.ALL, в неглавном убрать каскад
А это где? Где-то в сущности?
У меня нигде таких слов нет.
Кстати, вот так работает, но это как-то не красиво:
Код: sql
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.
    protected BigDecimal insert_r(int id, String user_name, int lpucode, String fio, int call_time, int type, String some_comment, int callstatus){

        BigDecimal newid=BigDecimal.ZERO;
        newid=get_max_id();
        if(newid==null){newid=BigDecimal.ZERO;}
        newid=newid.add(BigDecimal.ONE);
        WorkTimeTable wt=new WorkTimeTable();
        //wt.setId(BigDecimal.valueOf((long)5778));
        wt.setId(newid);
        wt.setUserName(user_name);
        wt.setLpucode(BigInteger.valueOf((long)lpucode));
        wt.setFio(fio);
        wt.setCalltime(BigInteger.valueOf((long)call_time));
        wt.setType(BigInteger.valueOf((long)type));
        //wt.setSomeComment(some_comment);
        WorkTimeComments wtc=new WorkTimeComments();
        wtc.setId(BigDecimal.valueOf((long)12));
        wtc.setText(some_comment);
        wtc.setFkId(wt);
        //wtc.s;
        //Collection<WorkTimeComments> gh=new Collection<WorkTimeComments>();
        ArrayList<WorkTimeComments> gh=new ArrayList<WorkTimeComments>();
        gh.add(wtc);
        //wt.
        //wt.setWorkTimeCommentsCollection(gh);
        //wt.setSomeCommentId(BigInteger.TEN);
        Date dd=get_oracle_date();
        wt.setCallDate(dd);
        wt.setCallstatus(BigInteger.valueOf((long)callstatus));
        create(wt);
        em.persist(wtc);
        return newid;
    }



То есть отдельно em.persist(wtc);
...
Рейтинг: 0 / 0
Сущности: не создаются связанные записи
    #37750770
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А почему по-нормальному не работает не понятно!
И где указывать "cascade = CascadeType.ALL" тоже не понятно.
...
Рейтинг: 0 / 0
Сущности: не создаются связанные записи
    #37750775
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Niky4000А почему по-нормальному не работает не понятно!
И где указывать "cascade = CascadeType.ALL" тоже не понятно.
ну, если работает, то ладно.
Чтобы копать, надо делать маленький пример-демку и выкидывать всё лишнее.
Эта штука для уменьшения кода и чтобы хибер знал как сохранять подчинённую коллекцию.
Удачи!
...
Рейтинг: 0 / 0
Сущности: не создаются связанные записи
    #37750929
Niky4000
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну, работает, но удобнее было бы всё в одну сущность запихнуть, а потом em.persist(сущность) и чтоб всё создалось и так же бы, если надо update сделать, то em.merge(сущность) и чтоб всё обновилось...
А так приходится на каждый пук persist'тить...
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Сущности: не создаются связанные записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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