У меня есть родительский класс (для простоты понимания и работы на ваших локальных компьютерах я упростил структуру класса)
@Entity
@Table(name = "entity_a")
public class EntityA implements Serializable, Persistable<Integer> {
@Id
@Column(name = "id")
private Integer id;
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "entity_b_id")
private EntityB entityB;
/* Getter and Setter */
@Override
public boolean isNew() {
return isNew;
}
}
@Entity
@Table(name = "entity_b")
public class EntityB implements Serializable, Persistable<String> {
@Id
@Column(name = "id")
private String id;
@Column(name = "name")
private String name;
@OneToOne(mappedBy = "entityB")
private EntityA entityA;
/* Getters and Setters */
@Override
public boolean isNew() {
return isNew;
}
}
Когда я пытаюсь сохранить новую сущность EntityA, используя следующий репозиторий данных Spring:
public interface EntityARepository extends JpaRepository<EntityA, Integer> {
}
он проверяет только isNew
на EntityA
, но игнорирует isNew
на EntityB
, и я продолжаю получать primary key constraint
ошибки при выполнении операции постоянства
Причинапочему я реализую интерфейс Persistable
, потому что EntityB на самом деле является чем-то, что может повторяться довольно много раз, поэтому я хотел бы проверить его существование и установить логическое значение isNew
соответственно перед сохранением
Как сделать, чтобы хранилище пружин учитывало также свойство isNew
дочернего класса, помеченное как каскадное