У меня есть следующий родительский объект:
public class User {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "email", unique = true)
private String email;
@OneToOne(cascade = CascadeType.ALL, orphanRemoval = true)
private Address address;
}
И следующий дочерний объект:
public class Address {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id")
private Long id;
@Column(name = "address")
private final String address;
}
Для дочернего объекта у меня есть собственный репозиторий, расширяющий дефолтный. Вот реализация:
@Override
public <S extends Address> S save(S address) {
//Some important additional logic here, lets say it will be log:
log.info("The problem is that this message does not appear when I create a user entity!");
//And perform a simple save operation
if (entityInformation.isNew(address)) {
entityManager.persist(address);
return address;
} else {
return entityManager.merge(address);
}
}
Когда я создаю пользователя, он каскадно создает связанный адрес. НО при этом он использует метод сохранения по умолчанию из хранилища адресов по умолчанию, а не мой переопределенный метод. Поэтому он пропускает важный лог c для сохранения адреса. Как мне сделать так, чтобы использовать переопределенный метод?
Вот как я создаю пользователя:
User user = new User();
user.setEmail("test@test.test");
user.setAddress(new Address("My address"));
userRepo.save(user);