Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Разборки с hibernate - many-to-one / 11 сообщений из 11, страница 1 из 1
28.01.2007, 15:29:51
    #34288016
Разборки с hibernate - many-to-one
Пытаюсь сделать простой мапинг many-to-one, а не получается. Вроде все делаю по их референсу.
Две таблицы, адрес и улица, на одной улице много адресов.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
CREATE TABLE `address` (
  `addressID` int( 11 ) NOT NULL auto_increment,
  `streetID` int( 11 ) NOT NULL,
  `addressHouse` int( 11 ) NOT NULL,
  `addressApart` int( 11 ) NOT NULL,
  PRIMARY KEY  (`addressID`),
  KEY `streetID` (`streetID`),
  CONSTRAINT `address_fk` FOREIGN KEY (`streetID`) REFERENCES `street` (`streetID`) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Код: plaintext
1.
2.
3.
4.
5.
6.
CREATE TABLE `street` (
  `streetID` int( 11 ) NOT NULL auto_increment,
  `streetPrefix` varchar( 20 ) NOT NULL,
  `streetName` varchar( 40 ) NOT NULL,
  PRIMARY KEY  (`streetID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 public   class  Address {

     private   Long  addressID;

     private   Long  streetID;

     private   int  addressHouse;

     private   int  addressApart;

     private  Street parentStreet;
    // гетеры сетеры далее

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
 public   class  Street {

     private   Long  streetID;

     private  String streetPrefix;

     private  String streetName;

     private  Set<Address> addresses;
    // гетеры сетеры далее

Код: 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.
<hibernate-mapping
>
    < class 
        name="beans.entity.Address"
        table="address"
    >

        <id
            name="addressID"
            column="addressID"
            type="java.lang.Long"
        >
            <generator  class ="native">
           
            </generator>
        </id>

        <property
            name="streetID"
            type="java.lang.Long"
            update="true"
            insert="true"
            column="streetID"
            not- null ="true"
        />

        <property
            name="addressHouse"
            type="int"
            update="true"
            insert="true"
            column="addressHouse"
            not- null ="true"
        />

        <property
            name="addressApart"
            type="int"
            update="true"
            insert="true"
            column="addressApart"
            not- null ="true"
        />

       пробую делать так, но выдает ошибку
        <!--<many-to-one-->
            <!--name="parentStreet"-->
            <!-- class ="beans.entity.Street"-->
            <!--column="streetID"-->
        <!--/>-->


    </ 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.
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.
<hibernate-mapping>
    < class 
        name="beans.entity.Street"
        table="street"
    >

        <id
            name="streetID"
            column="streetID"
            type="java.lang.Long"
        >
            <generator  class ="native">
              <!--  
                  To add non XDoclet generator parameters, create a file named 
                  hibernate-generator-params-Street.xml 
                  containing the additional parameters and place it in your merge dir. 
              --> 
            </generator>
        </id>

        <property
            name="streetPrefix"
            type="java.lang.String"
            update="true"
            insert="true"
            column="streetPrefix"
            not- null ="true"
        />

        <property
            name="streetName"
            type="java.lang.String"
            update="true"
            insert="true"
            column="streetName"
            not- null ="true"
        />

        <set
            name="addresses"
            lazy="false"
            cascade="none"
            sort="unsorted"
        >

            <key
                column="streetID"
            >
            </key>

            <one-to-many
                   class ="beans.entity.Address"
            />

        </set>
     

    </ class >

</hibernate-mapping>

insert в обе таблицы работают, one-to-many используя Set тоже работает, а вот many-to-one ни в какую.
Если раскоментировать тот мапинг, то выдает вот такую ошибку:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
 14 : 29 : 12 , 031  DEBUG org.hibernate.cfg.CollectionSecondPass - Mapped collection key: streetID, one-to-many: beans.entity.Address
 14 : 29 : 12 , 031  DEBUG org.hibernate.cfg.Configuration - processing  native  query and ResultSetMapping mappings
 14 : 29 : 12 , 031  DEBUG org.hibernate.cfg.Configuration - processing association property references
 14 : 29 : 12 , 031  DEBUG org.hibernate.cfg.Configuration - processing foreign key constraints
 14 : 29 : 12 , 031  DEBUG org.hibernate.cfg.Configuration - resolving reference to  class : beans.entity.Street
Exception in thread "main" java.lang.NoClassDefFoundError
	at db.managers.StreetManager.getStreet(StreetManager.java: 58 )
	at Main.main(Main.java: 43 )
	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 )

Замучался, помогите пожалуйста.
...
Рейтинг: 0 / 0
28.01.2007, 15:55:22
    #34288038
Javakka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разборки с hibernate - many-to-one
Видимо, проблема в том, что для двусторонних отношений надо один конец указывать с параметром inverse="true"

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
< class  name="Parent">
    <id name="id" column="parent_id"/>
    ....
    <set name="children" inverse="true">
        <key column="parent_id"/>
        <one-to-many  class ="Child"/>
    </set>
</ class >

< class  name="Child">
    <id name="id" column="child_id"/>
    ....
    <many-to-one name="parent" 
         class ="Parent" 
        column="parent_id"
        not- null ="true"/>
</ class >
...
Рейтинг: 0 / 0
28.01.2007, 16:01:23
    #34288045
Разборки с hibernate - many-to-one
читал, пробовал, не спасает
пробовал коментировать мапинг one-to-many, не спасает =((
...
Рейтинг: 0 / 0
29.01.2007, 09:30:14
    #34288673
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разборки с hibernate - many-to-one
имхо, в стэктрэйсе однако большая сила
Код: plaintext
1.
 14 : 29 : 12 , 031  DEBUG org.hibernate.cfg.Configuration - resolving reference to  class : beans.entity.Street
Exception in thread "main" java.lang.NoClassDefFoundError
...
Рейтинг: 0 / 0
29.01.2007, 12:06:35
    #34289180
Разборки с hibernate - many-to-one
только не понятно какой класс не может найти.
beans.entity.Street ?
вроде всё правильно, вот к нему такой же путь в мапинге, который работает
Код: plaintext
1.
2.
3.
4.
    < class 
        name="beans.entity.Street"
        table="street"
    >
все jar-ники хибера подключены ...
...
Рейтинг: 0 / 0
29.01.2007, 13:16:56
    #34289514
expp
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разборки с hibernate - many-to-one
в classpath'e видимо отсутствует он ....
...
Рейтинг: 0 / 0
29.01.2007, 15:52:16
    #34290177
Разборки с hibernate - many-to-one
exppв classpath'e видимо отсутствует он ....

есть он в класпасе, ведь если коментирую

Код: plaintext
1.
2.
3.
4.
5.
        <!--<many-to-one-->
            <!--name="parentStreet"-->
            <!-- class ="beans.entity.Street"-->
            <!--column="streetID"-->
        <!--/>-->

то инсерты проходят как в одну таблицу так и в другую
...
Рейтинг: 0 / 0
29.01.2007, 22:59:08
    #34291277
Разборки с hibernate - many-to-one
any help ? :(
...
Рейтинг: 0 / 0
30.01.2007, 16:00:33
    #34293416
Разборки с hibernate - many-to-one
понял где ошибка ...
может кому то будет интересно :
нельзя одновременно мапить в Child'e
parent_id -> Long parentID
и
many-to-one -> Parent parent
...
Рейтинг: 0 / 0
30.01.2007, 16:40:34
    #34293608
Alexey Bo
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Разборки с hibernate - many-to-one
hibernate - many-to-oneпонял где ошибка ...
может кому то будет интересно :
нельзя одновременно мапить в Child'e
parent_id -> Long parentID
и
many-to-one -> Parent parent


На самом деле можно, если update="false" insert="false" поставить у ParentId. свойство будет только для чтения... иногда полезно :)
...
Рейтинг: 0 / 0
30.01.2007, 17:09:55
    #34293765
Разборки с hibernate - many-to-one
действительно, спасибо за совет
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Разборки с hibernate - many-to-one / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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