Я использую JPA для классических отношений между двумя таблицами (1: N):
RefCollectivite (1) ==> (N) ColPlanCompteM61
Я хочу каскадное удаление при удалении сущности RefCollectivite.
Каскадное удаление работает хорошо, за исключением случаев, когда сущность RefCollectivite была только что создана (когда я создаю 1 RefCollectivite, я также создаю 232 ColPlanCompteM61).
Объекты ColPlanCompteM61 не обнаруживаются при удалении RefCollectivite и сбое удаления из-за нарушения внешнего ключа.
Мой код для постоянного RefCollectivite:
public void creerRefCollectivite(RefCollectivite collectivite) {
try {
getEntityManager().persist(collectivite);
getEntityManager().flush();
} catch (Exception e) {
}
}
Persist ColPlanCompteM61:
public void initialiserCollectivite(RefCollectivite collectivite) {
List<RefPlanCompteM61> listeRefPlanCompteM61 = getRefPlanCompteM61Facade().rechercherListeRefPlanCompteM61();
for (RefPlanCompteM61 ligne : listeRefPlanCompteM61) {
ColPlanCompteM61 colPlanCompteM61 = new ColPlanCompteM61(ligne, collectivite);
try {
getEntityManager().persist(colPlanCompteM61);
} catch (Exception e) {
}
}
}
Мой код для удаления:
public void supprimerRefCollectivite(RefCollectivite collectivite) {
try {
getEntityManager().remove(rechercherRefCollectivite(collectivite));
} catch (NoResultException e) {
}
}
public RefCollectivite rechercherRefCollectivite(RefCollectivite collectivite) {
Query jQuery = getEntityManager().createQuery("select x from RefCollectivite x where x.idPk = :clePrimaire");
jQuery.setParameter("clePrimaire", collectivite.getIdPk());
try {
return (RefCollectivite) jQuery.getSingleResult();
} catch (NoResultException e) {
return null;
}
}
Сущность: RefCollectivite
@Entity
@Table(name = "RefCollectivite")
public class RefCollectivite implements Serializable {
@OneToMany(cascade = CascadeType.REMOVE, mappedBy="refCollectivite")
private List<ColPlanCompteM61> listePlanCompteM61;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idPk;
Объект: ColPlanCompteM61:
@Entity
@Table(name = "ColPlanCompteM61")
public class ColPlanCompteM61 implements Serializable{
@ManyToOne
@JoinColumn(name = "REFCOLLECTIVITEFK", referencedColumnName = "IDPK", insertable = false, updatable = false)
private RefCollectivite refCollectivite;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int idPk;
private int refCollectiviteFk;
private int refPlanCompteM61Fk;
private Double valeur01;
private Double valeur02;
private Double valeur03;
private Double valeur04;
private Double valeur05;