Когда уместно использовать двунаправленную ассоциацию, а когда нет?

Давайте представим, что мы хотим создать приложение, подобное eBay, в котором у нас есть объект с именем Customer и объект с именем Order .

Из реляционного В перспективе я бы смоделировал это как:

Customer
+----+-----+
| ID | ... |
+----+-----+

Order
+----+-------------+-----+
| ID | CUSTOMER_ID | ... |
+----+-------------+-----+

Теперь, когда я хочу отобразить это в JPA, у меня есть несколько вариантов:

  1. Создать однонаправленную связь «многие к одному» от заказа к клиенту. ИМХО, это наиболее близкая к реляционной модели. Обратной стороной является то, что для того, чтобы найти все заказы для данного клиента, мне нужно написать запрос JPQL, поскольку клиент ничего не знает о своих заказах. Также я не могу естественным образом ОО добавить новый заказ для клиента (например, customer.addOrder (aNewOrder); ).

  2. Создать связь «один ко многим» от клиента к заказу. Таким образом, чтобы найти все заказы для данного клиента, я могу использовать customer.getOders () , и я могу добавлять новые заказы для клиента естественным образом. Обратной стороной является то, что для определения клиента, разместившего данный заказ, я должен использовать JPQL.

  3. Создайте двунаправленную связь «один ко многим» от клиента к заказу. Таким образом, мне не нужно писать какие-либо запросы JPQL для получения всех заказов клиента или клиента, разместившего данный заказ. Обратной стороной является добавленная сложность для поддержания двунаправленной ассоциации.

Таким образом, я не вижу определенного аргумента относительно того, должна ли использоваться однонаправленная ассоциация или двунаправленная ассоциация является «правильной». Другими словами, мне кажется, что все сводится к личным предпочтениям и вкусу дизайнера / разработчика модели.

Прав ли я, или существуют правила, согласно которым можно определить правильную направленность данной ассоциации ?

14
задан Nilesh 13 June 2011 в 12:53
поделиться