Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate: one-to-many / 12 сообщений из 12, страница 1 из 1
06.10.2007, 18:36:29
    #34851911
-Sergey-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
привет всем,
изучаю хибернейт и возникла следующая проблема - не сохраняются данные в подчиненой таблице..
просьба сказать где ошибся и как исправить..

Код: plaintext
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.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans  PUBLIC  "-//SPRING//DTD BEAN//EN"
    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

    <!-- Hibernate -->
    <bean id="dataSource"  class ="org.springframework.jdbc.datasource.DriverManagerDataSource">
        <property name="driverClassName"><value>org.firebirdsql.jdbc.FBDriver</value></property>
        <property name="url"><value>jdbc:firebirdsql:localhost:c:/temp/mybase.fdb</value></property>
        <property name="username"><value>SYSDBA</value></property>
        <property name="password"><value>masterkey</value></property>
    </bean>


    <bean id="sessionFactory"  class ="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <property name="dataSource"><ref local="dataSource"/></property>
        <property name="mappingResources">
            <list>
                <value>resource/User.hbm.xml</value>
                <value>resource/Vote.hbm.xml</value>
            </list>
        </property>
        <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.FirebirdDialect</prop>
            <prop key="hibernate.hbm2ddl.auto">create</prop>
            <prop key="hibernate.show_sql">false</prop>
        </props>
        </property>
    </bean>



    <bean id="transactionManager"  class ="org.springframework.orm.hibernate3.HibernateTransactionManager">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>

    <bean id="transactionAttributes"
           class ="org.springframework.transaction.interceptor.NameMatchTransactionAttributeSource">
        <property name="properties">
            <props>
                <prop key="save*">PROPAGATION_REQUIRED</prop>
                <prop key="delete*">PROPAGATION_REQUIRED</prop>
                <prop key="find*">PROPAGATION_REQUIRED,readOnly</prop>
            </props>
        </property>

    </bean>

    <bean id="nameMatchTxInterceptor"  class ="org.springframework.transaction.interceptor.TransactionInterceptor">
        <property name="transactionManager"><ref bean="transactionManager"/></property>
        <property name="transactionAttributeSource"><ref bean="transactionAttributes"/></property>
    </bean>



    <!-- Add DAO Object here -->
    <bean id="userDAO"  class ="com.mypackage.dao.impl.IUserDAOImpl">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>

    <bean id="voteDAO"  class ="com.mypackage.dao.impl.IVoteDAOImpl">
        <property name="sessionFactory"><ref local="sessionFactory"/></property>
    </bean>


    <!-- Add Managers here -->
    <bean id="userManager"  class ="com.mypackage.services.impl.UserManagerImpl">
        <property name="userDAO">
            <ref local="userDAO"/>
        </property>
    </bean>

    <!-- other beans -->
</beans>


Код: plaintext
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.
public class Test {
    public static ApplicationContext ctx;

    public static void main( String[] args){
        System.out.println( "try to load context");
        ctx = new ClassPathXmlApplicationContext("applicationContext.xml");
        System.out.println( "try to get bean");
        IUserManager manager = (IUserManager) ctx.getBean("userManager");
        
        System.out.println( "create user");
        User user = new User();
        user.setUsrName("user num 1");
        user.setUsrFio("developer");
        System.out.println( "try to save user");

        Vote vote = new Vote();
        vote.setTitle( "First Title");
        vote.setQuestion( "the first question//");

        Vote vote1 = new Vote();
        vote1.setTitle( "Second title");
        vote1.setQuestion( "Scond title");

        Set set = new HashSet();
        set.add( vote);
        set.add( vote1);

        user.setVotes( set);
        manager.appendUser( user);


    }
}

сохраняет только пользователя а связанные данные игнорирует.
-

Цель в жизни определяет все..
Выбор есть всегда..
Но мы часто не хотим его делать..
...
Рейтинг: 0 / 0
06.10.2007, 19:27:46
    #34851939
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
Замаплены то они
Код: plaintext
1.
2.
<value>resource/User.hbm.xml</value>
<value>resource/Vote.hbm.xml</value>
как?
...
Рейтинг: 0 / 0
06.10.2007, 19:29:14
    #34851940
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
Да и тесты полезно от AbstractTransactionalSpringContextTests наследовать
...
Рейтинг: 0 / 0
06.10.2007, 19:57:09
    #34851963
-Sergey-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
Код: plaintext
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.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping  PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    < class  name="com.mypackage.domain.User" table="USER_TBL">
        <id name="usrId" column="USER_ID">
            <generator  class ="native"/>
        </id>
        <property name="usrLogin"  type="string" length="25" column="USER_LOGIN"/>        
        <property name="usrName"  type="string" length="25" column="USER_NAME"/>
        <property name="usrFio" type="string" length="25" column="USER_FIO"/>
        <property name="password" type="string" length="25" column="USER_PASSWORD"/>
        <property name="admin" type="boolean" column="USER_ADMIN"/>
        <property name="usrAge" type="integer"  column="USER_AGE"/>

        <set name="votes" inverse="true" outer-join="auto" >
            <key column="VOITING_ID" />
            <one-to-many  class ="com.mypackage.domain.Vote"/>
        </set>

    </ class >

</hibernate-mapping>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping  PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    < class  name="com.mypackage.domain.Vote" table="VOTING_TBL">
        <id name="id" column="VOITING_ID">
            <generator  class ="native"/>
        </id>
        <property name="title"  type="string" length="255" column="TITLE"/>
        <property name="question" type="string" length="255" column="QUESTION"/>
        <property name="previewCount" type="integer" column="PREVIEW_COUNT"/>
        <property name="answerCount" type="integer" column="ANSWER_COUNT"/>

        <many-to-one name="user" column="USER_ID" outer-join="auto"
                      class ="com.mypackage.domain.User" />

    </ class >

</hibernate-mapping>


-

Цель в жизни определяет все..
Выбор есть всегда..
Но мы часто не хотим его делать..
...
Рейтинг: 0 / 0
06.10.2007, 19:58:01
    #34851964
-Sergey-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
zalexakaДа и тесты полезно от AbstractTransactionalSpringContextTests наследовать
спасибо за совет
...
Рейтинг: 0 / 0
06.10.2007, 21:27:20
    #34851999
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
Код: plaintext
1.
2.
3.
<set name="votes" inverse="true" outer-join="auto" cascade="all">
            <key column="VOITING_ID" />
            <one-to-many class="com.mypackage.domain.Vote"/>
</set>

all конечно может быть многовато, почитайте доку
...
Рейтинг: 0 / 0
07.10.2007, 00:34:08
    #34852150
-Sergey-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
2 zalexara попробывал ваш вариант, не помогло выдает ошибку ,
так же попробывал save-update из документации таже самая ошибка
если судить по тексту ошибки то нет внешнего ключа, но в примере к хибернейту не создается внешний ключ .. ладно пойду спать а то уже поздно может завтра кто нибудь подскажет...
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception.  335544466 . violation of FOREIGN KEY constraint "FK8682D8868AACEC90" on table "VOTING_TBL"
Foreign key reference target does not exist
	at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java: 711 )
	at org.firebirdsql.jdbc.AbstractPreparedStatement.executeUpdate(AbstractPreparedStatement.java: 171 )
	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java: 23 )
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java: 2120 )
	...  19  more

-

Цель в жизни определяет все..
Выбор есть всегда..
Но мы часто не хотим его делать..
...
Рейтинг: 0 / 0
07.10.2007, 02:51:00
    #34852215
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
скажите хиберу:
Код: plaintext
hibernate.show_sql=true

настройте логгер:
Код: plaintext
1.
log4j.logger.org.hibernate.type=DEBUG
log4j.logger.org.hibernate.SQL=DEBUG

потом смотрите что и куда он инсертит и какие значения сетит в параметры
зы
а если так?
Код: plaintext
1.
2.
<many-to-one name="user" column="USER_ID" outer-join="auto"
not-null="true" unique="true" update="false" class="com.mypackage.domain.User" />
...
Рейтинг: 0 / 0
07.10.2007, 02:52:19
    #34852216
zalexaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
сорри unique="true" ф топку
зы
ночь однака :))
...
Рейтинг: 0 / 0
08.10.2007, 22:11:26
    #34855315
-Sergey-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
перепробывал все варианты которые предложили.. успеха не добился , буду благодарен за любую помощь ..
при попытке выполнить получаю следующую ошибку :
Код: plaintext
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.
Hibernate: select gen_id( hibernate_sequence,  1  ) from RDB$DATABASE
Hibernate: select gen_id( hibernate_sequence,  1  ) from RDB$DATABASE
Hibernate: select gen_id( hibernate_sequence,  1  ) from RDB$DATABASE
Hibernate: insert into USER_TBL (USER_LOGIN, USER_NAME, USER_FIO, USER_PASSWORD, USER_ADMIN, USER_AGE, USER_ID) values (?, ?, ?, ?, ?, ?, ?)
Hibernate: insert into VOTING_TBL (TITLE, QUESTION, PREVIEW_COUNT, ANSWER_COUNT, USER_ID, VOITING_ID) values (?, ?, ?, ?, ?, ?)
Exception in thread "main" org.springframework.orm.hibernate3.HibernateJdbcException: JDBC exception on Hibernate data access; nested exception is org.hibernate.exception.GenericJDBCException: could not insert: [com.mypackage.domain.Vote]
Caused by: org.hibernate.exception.GenericJDBCException: could not insert: [com.mypackage.domain.Vote]
	at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java: 103 )
	at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java: 91 )
	at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java: 43 )
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java: 2140 )
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java: 2503 )
	at org.hibernate.action.EntityInsertAction.execute(EntityInsertAction.java: 51 )
	at org.hibernate.engine.ActionQueue.execute(ActionQueue.java: 248 )
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java: 232 )
	at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java: 139 )
	at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java: 297 )
	at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java: 27 )
	at org.hibernate.impl.SessionImpl.flush(SessionImpl.java: 993 )
	at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java: 388 )
	at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java: 363 )
	at org.springframework.orm.hibernate3.HibernateTemplate.save(HibernateTemplate.java: 622 )
	at com.mypackage.dao.impl.IUserDAOImpl.saveUser(IUserDAOImpl.java: 19 )
	at com.mypackage.services.impl.UserManagerImpl.appendUser(UserManagerImpl.java: 25 )
	at Test.main(Test.java: 45 )
	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: 585 )
	at com.intellij.rt.execution.application.AppMain.main(AppMain.java: 90 )
Caused by: org.firebirdsql.jdbc.FBSQLException: GDS Exception.  335544466 . violation of FOREIGN KEY constraint "FK8682D8868AACEC90" on table "VOTING_TBL"
Foreign key reference target does not exist
	at org.firebirdsql.jdbc.AbstractPreparedStatement.internalExecute(AbstractPreparedStatement.java: 711 )
	at org.firebirdsql.jdbc.AbstractPreparedStatement.executeUpdate(AbstractPreparedStatement.java: 171 )
	at org.hibernate.jdbc.NonBatchingBatcher.addToBatch(NonBatchingBatcher.java: 23 )
	at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java: 2120 )
	...  19  more

-

Цель в жизни определяет все..
Выбор есть всегда..
Но мы часто не хотим его делать..
...
Рейтинг: 0 / 0
09.10.2007, 14:29:46
    #34856953
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
включи логирование org.hibernate.type увидишь значения вопросиков

похоже что или акойто косяк с подстановкой USER_ID
или на этом поле стоит ограничение уникальности.

отскрипти "FK8682D8868AACEC90" on table "VOTING_TBL" чтоб посмотреть чего там за констрэйнт
...
Рейтинг: 0 / 0
10.10.2007, 19:48:05
    #34861543
-Sergey-
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
hibernate: one-to-many
разобрался наконец, выкладываю готовую часть может кому пригодится..

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping  PUBLIC 
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    < class  name="com.enetcyberserver.domain.Test1" table="Test1">
        <id name="id" column="TEST1_ID">
            <generator  class ="native"/>
        </id>
        <property name="title" type="string" column="TITLE"/>

        <set name="other"  inverse="true" outer-join="auto" cascade="all">
            <key column="TEST2_ID" />
            <one-to-many  class ="com.enetcyberserver.domain.Test2"/>
        </set>
    </ class >

</hibernate-mapping>

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
        "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping>

    <class name="com.enetcyberserver.domain.Test2" table="Test2">
        <id name="id" column="TEST2_ID">
            <generator class="native"/>
        </id>
        <property name="title" type="string" column="TITLE"/>

        <many-to-one name="other" column="OTHER" outer-join="auto"
                     class="com.enetcyberserver.domain.Test2" />

    </class>

</hibernate-mapping>

И совет обязательно проверять constraint-ы кторые создает хибернейт. он их не всегда удаляет
-

Цель в жизни определяет все..
Выбор есть всегда..
Но мы часто не хотим его делать..
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / hibernate: one-to-many / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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