Когда использовать, а не использовать OneToOne и ManyToOne - PullRequest
11 голосов
/ 16 июля 2010

Я только начал читать JPA и реализацию в hibernate, чтобы понять детали.но, чтобы продолжить разработку до тех пор, вы можете помочь прояснить основные вопросы.

  1. Когда использовать OneToOne
    Я могу использовать OneToOne, если диспетчер сущностей должен обрабатывать постоянство связанного объекта.Дело в том, что я всегда могу жить без указания oneToOne, но тогда я отвечаю за управление отношениями и за то, чтобы указанные объекты не были в переходном состоянии.Это правда?

  2. Когда использовать или не использовать ManyToOne
    Скажем, я определяю класс Employee и должен определить rel с Employer.В этом случае мне нужно указать manyToOne, как показано ниже, или что если не

     @Entity   
        public class Employer {  
        String name;   
        }   
    
        @Entity   
        class Employee {  
            String name;  
            @ManytoOne  //or not??   
            Employer employer;   
            }
    

спасибо

Ответы [ 2 ]

7 голосов
/ 16 июля 2010

1: При работе с отношениями сущностей вы всегда должны использовать соответствующие аннотации (OneToOne, OneToMany, ManyToOne или ManyToMany).У вас есть выбор: хотите ли вы убедиться, что сущность, лежащая в основе отношения, не является временной, или указать свойство cascade в аннотации OneToOne, чтобы JPA позаботилась об этом за вас.Это позволяет создавать целый граф объектов и сохранять их в одном вызове:

@OneToOne(cascade = CascadeType.ALL)
private MyType myType;

2: Да, отношение работодатель-работник звучит как отношение OneToMany, а сотрудникОтношения между работодателем будут ManyToOne.Если вы хотите иметь оба направления, это называется двусторонними отношениями.Подробнее смотрите в соответствующем разделе учебного курса по Java EE .

Раздел JPA в учебном руководстве по Java EE является хорошим справочным материалом для начала. ** 1016

3 голосов
/ 17 июля 2010

Когда использовать OneToOne Я могу использовать OneToOne, если диспетчер сущностей должен обрабатывать постоянство связанного объекта.Дело в том, что я всегда могу жить без указания oneToOne, но тогда я отвечаю за управление отношениями и за то, чтобы указанные объекты не были в переходном состоянии.Это правда?

Вам не нужно отмечать отношения, если вы не хотите, чтобы менеджер сущностей обрабатывал операции.Вы можете иметь связанный объект в качестве переходного поля и сохранить связанный объект вручную.Но в этом случае вы не будете использовать весь список функций, которые предоставляет JPA.

Отметив отношения, EntityManager узнает о структуре базы данных.И это очень важно, если вы хотите использовать мощь JPA.

Eg: class Car
      {
         @OneToOne
         Warehouse warehouse;
         //other fields
      }

Здесь

  • Я могу получить связанный объект хранилища при получении автомобиля

  • Я могу сохранить объект Warehouse при сохранении автомобиля (с каскадной опцией, как объясняется на плакате ниже)

  • аналогично Update, Delete ...

Кроме этого, при использовании JPQL

вы можете перейти к Warehouse

, как в

em.createQuery("select c.warehouse from Car c"); 

. Они не будут работать, если вы не отметитеотношения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...