Я только что начал читать JPA, и реализация в в спящем режиме для понимания деталей. но, чтобы продолжить разработку до того времени, может Вы помогать разъяснить основной qn.
Когда использовать OneToOne
Я могу использовать OneToOne, если менеджер по объекту должен обработать постоянство связанного объекта. точка, я могу всегда жить, не указывая непосредственный, но затем ответственность находится на мне для управления отношениями и удостоверяясь, что отнесенные объекты не находятся в переходном состоянии. Действительно ли это верно?
Когда использовать, или не использовать, ManyToOne
Скажите, что я определяю класс Сотрудника и должен определить рэл с Работодателем. В этом случае сделайте я должен указать manyToOne как ниже, или что если нет
@Entity
public class Employer {
String name;
}
@Entity
class Employee {
String name;
@ManytoOne //or not??
Employer employer;
}
спасибо
1: При работе с отношениями сущностей вы всегда должны использовать соответствующие аннотации (OneToOne, OneToMany, ManyToOne или ManyToMany). У вас есть выбор: хотите ли вы убедиться, что сущность, стоящая за отношением, не является временной, или указать свойство cascade в аннотации OneToOne, чтобы JPA позаботилась об этом за вас. Это позволяет вам создать целый граф объектов и сохранить их за один вызов:
@OneToOne(cascade = CascadeType.ALL)
private MyType myType;
2: Да, отношения работодатель-сотрудник звучат как отношения OneToMany, а отношения между сотрудником и работодателем будут ManyToOne. Если вы хотите иметь оба направления, это называется двусторонними отношениями. См. Подробности в соответствующем разделе руководства по Java EE .
Раздел JPA в руководстве по Java EE - хорошая ссылка для начала.
Когда использовать OneToOne Я могу использовать OneToOne, если диспетчеру сущностей необходимо обеспечить постоянство связанного объекта. Дело в том, что я всегда могу жить без указания oneToOne, но тогда я должен управлять отношениями и следить за тем, чтобы упомянутые объекты не находились в переходном состоянии. Это правда?
Вам не нужно отмечать связь, если вы не хотите, чтобы диспетчер сущностей обрабатывал операции. Вы можете иметь связанную сущность как временное поле и сохранять связанную сущность вручную. Но в этом случае вы бы не использовали весь список функций, которые предоставляет JPA.
Помечая отношения, EntityManager узнает о структуре базы данных. И это важно, если вы хотите использовать возможности JPA.
Eg: class Car
{
@OneToOne
Warehouse warehouse;
//other fields
}
Здесь
я могу получить связанный объект Warehouse при извлечении автомобиля
Я могу сохранить объект Warehouse, сохраняя автомобиль (с каскадной опцией, как объяснено на плакате ниже)
Помимо этого, при использовании JPQL
вы можете перейти к хранилищу
, как в
em.createQuery("select c.warehouse from Car c");
. Они не будут работать, если вы не отметите взаимосвязь.