Когда использовать, а не использовать, OneToOne и ManyToOne

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

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

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

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

спасибо

Ответ 1

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

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

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

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

Ответ 2

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

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

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

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

Здесь

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

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

  • Аналогично обновить, удалить...

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

вы можете перейти на Склад

как в

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

Это не сработает, если вы не отметите связь.