Я использую JPA 2.Использование каскадного = cascadeType и выборки = FetchType
Я хотел бы знать следующее.
Каков наилучший подход для ограничения вставки, обновления или удаления, когда родительский ключ не существует в родительской таблице.
У меня есть следующий сценарий Entity
@Entity public class Employee { @OneToMany(mappedBy = "requester") private Set<Project> requestedProjects; @OneToMany(mappedBy = "approver") private Set<Project> approvedProjects; } @Entity public class Project @ManyToOne @JoinColumn(name = "EMPLOYEE_NUMBER", referencedColumnName = "EMPLOYEE_NUMBER") private Employee requester; @ManyToOne @JoinColumn(name = "APPROVER", referencedColumnName = "EMPLOYEE_NUMBER") private Employee approver; }
Что такое мое ограниченное понимание этого вопроса является использование cascade=cascadeType.ALL
делает вставки и удаления, если родительский ключ не существует.
И в чем разница между MERGE
, PERSIST
и ALL
?
- Кроме того, когда это целесообразно использовать
fetch = FetchType
Любая помощь является весьма заметным
Крис У меня есть сомнения относительно типа выборки и ленивой выборки. Если у меня есть какая-то ленивая загрузка, которая уже является частью моего приложения на передней панели, то есть я не загружаю все записи из базы данных, это основано на разбиении на страницы записей, когда записи отображаются в приложении. Я сомневаюсь, что мне нужно, чтобы все еще позволять получать ленивый? – user75ponic
Я не уверен, что понял вопрос. Если вы включили его, почему вам все еще нужно включить ленивый выбор? тип lazy fetch устанавливается на отображение, предотвращающее автоматическое чтение ссылочных объектов, когда считывается родительский объект.Если вы читаете в ребенке каким-то другим способом, чтение в родительском элементе по-прежнему будет заставлять JPA пытаться разрешить родительские -> дочерние отношения, если они не будут помечены как ленивые или оставленные без изменений. – Chris
Спасибо Крису за подробное объяснение. – user75ponic