Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Сущности: не создаются связанные записи / 6 сообщений из 6, страница 1 из 1
12.04.2012, 15:20:24
    #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
12.04.2012, 15:37:11
    #37750724
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности: не создаются связанные записи
Niky4000,
если есть каскад, то он должен односторонний, т.е.:
в главном поставить cascade = CascadeType.ALL, в неглавном убрать каскад
?
...
Рейтинг: 0 / 0
12.04.2012, 15:47:37
    #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
12.04.2012, 15:53:58
    #37750770
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности: не создаются связанные записи
А почему по-нормальному не работает не понятно!
И где указывать "cascade = CascadeType.ALL" тоже не понятно.
...
Рейтинг: 0 / 0
12.04.2012, 15:58:19
    #37750775
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности: не создаются связанные записи
Niky4000А почему по-нормальному не работает не понятно!
И где указывать "cascade = CascadeType.ALL" тоже не понятно.
ну, если работает, то ладно.
Чтобы копать, надо делать маленький пример-демку и выкидывать всё лишнее.
Эта штука для уменьшения кода и чтобы хибер знал как сохранять подчинённую коллекцию.
Удачи!
...
Рейтинг: 0 / 0
12.04.2012, 16:59:20
    #37750929
Niky4000
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Сущности: не создаются связанные записи
Ну, работает, но удобнее было бы всё в одну сущность запихнуть, а потом em.persist(сущность) и чтоб всё создалось и так же бы, если надо update сделать, то em.merge(сущность) и чтоб всё обновилось...
А так приходится на каждый пук persist'тить...
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Сущности: не создаются связанные записи / 6 сообщений из 6, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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