Всем привет. Начал читать туториал по 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? В таком случае, насколько я знаю, не всегда удается обойтись двумя таблицами... Заранее, спасибо. |