EmployeeEntity.java
@Entity
@Table(name = "Employee")
public class EmployeeEntity implements Serializable
{
private static final long serialVersionUID = -1798070786993154676L;
@Id
@Column(name = "ID", unique = true, nullable = false)
private Integer employeeId;
@Column(name = "FIRST_NAME", unique = false, nullable = false, length = 100)
private String firstName;
@Column(name = "LAST_NAME", unique = false, nullable = false, length = 100)
private String lastName;
@OneToMany(cascade=CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name="EMPLOYEE_ID")
private Set<AccountEntity> accounts;
//Getters and Setters Ommited
}
AccountEntity.java
@Entity
@Table(name = "Account")
public class AccountEntity implements Serializable
{
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID", unique = true, nullable = false)
@GeneratedValue(strategy = GenerationType.SEQUENCE)
private Integer accountId;
@Column(name = "ACC_NO", unique = false, nullable = false, length = 100)
private String accountNumber;
@OneToOne (mappedBy="accounts", fetch = FetchType.LAZY)
private EmployeeEntity employee;
}
Посмотрите на жирный шрифт в приведенном выше исходном коде для EmployeeEntity.Джава.Он определяет «cascade = CascadeType.ALL» и, по сути, означает, что любые изменения, произошедшие в EmployeeEntity, должны каскадироваться и в AccountEntity.Если вы сохраните сотрудника, все связанные учетные записи также будут сохранены в базе данных.Если вы удалите сотрудника, то все учетные записи, связанные с этим сотрудником, также будут удалены.Достаточно просто.
Но что, если мы хотим каскадировать только операции сохранения, а не операции удаления.Затем нам нужно четко указать его, используя приведенный ниже код.
@OneToMany(cascade=CascadeType.PERSIST, fetch = FetchType.LAZY)
@JoinColumn(name="EMPLOYEE_ID")
private Set<AccountEntity> accounts;
Теперь только когда методы save () или persist () вызываются с использованием экземпляра employee, тогда сохраняются только учетные записи.Если в сеансе вызывается любой другой метод, его влияние не повлияет на / каскадно для учетных записей.
Типы каскадов JPA
Типы каскадов, поддерживаемые архитектурой персистентности Java:как показано ниже:
- CascadeType.PERSIST: означает, что операции save () или persist () каскадно связаны со связанными объектами.
- CascadeType.MERGE: означает, что связанные сущности объединяются при владениисущность объединена.
- CascadeType.REFRESH: делает то же самое для операции refresh ().
- CascadeType.REMOVE: удаляет все связанные ассоциации сущностей с этим параметром при удалении сущности-владельца.
- CascadeType.DETACH: отсоединяет все связанные объекты, если происходит «ручное отсоединение».
- CascadeType.ALL: сокращение от всех вышеперечисленных каскадных операций.