Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Direction in Entity Relationships, нужна помощь с JPA 
:(
    Опции темы
Chupakabr
Дата 8.7.2010, 13:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 3.12.2008

Репутация: нет
Всего: нет



Всем привет.
Начал читать туториал по JPA  и наткнулся на сабж. Собственно, у меня несколько вопросов:
  • Зачем вообще нужна эта направленность?
  • Почему туториал противоречит сам себе? А точнее, вот определение двусторонней связи и правил которым она должна следовать:
    Цитата

    In a bidirectional relationship, each entity has a relationship field or property that refers to the
    other entity. [...]

    Bidirectional relationships must follow these rules: [...]

    For one-to-one bidirectional relationships, the owning side corresponds to the side that
    contains the corresponding foreign key.

    Выходит, что с одной стороны двусторонней является связь при которой обе сущности "знают" друг о друге (то есть имеют ссылки одна на другую), а с другой стороны при ассоциации OneTone владеющей сущностью является та,  в которой присутствует внешний ключ. Вот пример, приведённый в API для связи OneToOne:
    Код

        On Customer class:

        @OneToOne(optional=false)                  //зачем нужен элемент optional я так и не въехал...
        @JoinColumn(name="CUSTREC_ID", unique=true, nullable=false, updatable=false)  //зачем это надо?
        public CustomerRecord getCustomerRecord() { return customerRecord; }

        On CustomerRecord class:

        @OneToOne(optional=false, mappedBy="customerRecord")   //почему эта сущность является обратной?
        public Customer getCustomer() { return customer; }


    Что-то тут не так, либо я неправильно понял...
  • И последнее. Как происходит отображение ссылок в базу данных? Приведу пример
    Код

    @Entity
    Customer {
        @OneToMany(mappedBy=customer)
        private Set <Order> orders;
    }

    @Entity
    Order {
        @ManyToOne
        private Customer customer;
    }

    В этом случае в обоих таблицах представляющих сущности создаются колонки с внешними ключами указывающими на первичные ключи соответствующей сущности, или как?
    А если мы имеем тип ассоциации ManyToMany? В таком случае, насколько я знаю, не всегда удается обойтись двумя таблицами...
Заранее, спасибо.

Это сообщение отредактировал(а) Chupakabr - 8.7.2010, 13:50
PM MAIL   Вверх
AJetman
Дата 8.7.2010, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 16.8.2009

Репутация: 2
Всего: 2



Цитата(Chupakabr @  8.7.2010,  13:06 Найти цитируемый пост)
В этом случае в обоих таблицах представляющих сущности создаются колонки с внешними ключами указывающими на первичные ключи соответствующей сущности, или как?
 Именно. 

Рекомендую создать пробный проект и с включенной ddl и отображением sql-запросов в вашем jpa-провайдере посмотреть на практике, что и как создается.

Цитата(Chupakabr @  8.7.2010,  13:06 Найти цитируемый пост)
//зачем нужен элемент optional я так и не въехал...
 С optional (может быть и в аннотации @Basic), если JPA-провайдер поддерживает, последний производит валидацию сущности перед  сохранением. Такой же эффект, в принципе, можно получить и с помощью @Column и @JoinColumn nullable.


Цитата(Chupakabr @  8.7.2010,  13:06 Найти цитируемый пост)
В этом случае в обоих таблицах представляющих сущности создаются колонки с внешними ключами указывающими на первичные ключи соответствующей сущности, или как?
 Только в Order будет создано поле с первичным ключом Customer.


Это сообщение отредактировал(а) AJetman - 8.7.2010, 14:03
PM   Вверх
Chupakabr
Дата 8.7.2010, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 3.12.2008

Репутация: нет
Всего: нет



Цитата(AJetman @  8.7.2010,  14:02 Найти цитируемый пост)
С optional (может быть и в аннотации @Basic), если JPA-провайдер поддерживает, последний производит валидацию сущности перед  сохранением.


В каком смысле валидацию?

Ещё такой вопрос: jpa-провайдер это что-то наподобие JDBC-провайдера?
PM MAIL   Вверх
AJetman
Дата 8.7.2010, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 74
Регистрация: 16.8.2009

Репутация: 2
Всего: 2



Цитата(Chupakabr @  8.7.2010,  15:02 Найти цитируемый пост)
Ещё такой вопрос: jpa-провайдер это что-то наподобие JDBC-провайдера?
 Нет, под JPA-провайдером имею в виду реализацию JPA 1.0 или 2.0 в виде Hibernate EntityManager, EclipseLink, OpenJPA и DataNucleus.

Цитата(Chupakabr @  8.7.2010,  15:02 Найти цитируемый пост)
В каком смысле валидацию?
 Валидацию на то, что полю присвоено какое-то значение, а не оставлено как null.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0443 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.