JPA Cascade удалить ошибку после сохранения - PullRequest
0 голосов
/ 31 августа 2018

Я использую 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;

1 Ответ

0 голосов
/ 31 августа 2018

Для каскадного удаления сущностей в « более агрессивном режиме каскадного удаления » вы можете добавить атрибут orphanRemoval=true к аннотации ваших отношений в RefCollectivite. Но также, пожалуйста, добавьте некоторую информацию о вашем RefCollectivite и его дизайне JPA (Отношения).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...