JPA OneToOne级联删除

时间:2016-08-06 21:59:32

标签: jpa mapping one-to-one

我有两个类Document和Medecin之间的关系

@Entity
public class Document implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;
    private String annee;
    private Date dateVisite;
    private String secteur;
    private String typeVisite;
    @OneToOne( fetch=FetchType.LAZY,cascade=CascadeType.REMOVE)
    @JoinColumn(name = "idMedecin")

    private Medecin medecin;

    public Document(String annee, 
            Date dateVisite, String secteur, String typeVisite) {
        super();
        this.annee = annee;
        this.dateVisite = dateVisite;
        this.secteur = secteur;
        this.typeVisite = typeVisite;
    }

    public String getSecteur() {
        return secteur;
    }

    public void setSecteur(String secteur) {
        this.secteur = secteur;
    }

    public String getTypeVisite() {
        return typeVisite;
    }

    public void setTypeVisite(String typeVisite) {
        this.typeVisite = typeVisite;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getAnnee() {
        return annee;
    }

    public void setAnnee(String annee) {
        this.annee = annee;
    }

    public Date getDateVisite() {
        return dateVisite;
    }

    public void setDateVisite(Date dateVisite) {
        this.dateVisite = dateVisite;
    }

}

和medecin实体是

@Entity
public class Medecin implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private long id;
    private String nom;
    private String secteur;
    private int telephone;
    private int specialite;

    public Medecin() {
        super();
        // TODO Auto-generated constructor stub
    }

    public Medecin(String nom, String secteur, int telephone, int specialite) {
        super();
        this.nom = nom;
        this.secteur = secteur;
        this.telephone = telephone;
        this.specialite = specialite;
    }

    public long getId() {
        return id;
    }

    public void setId(long id) {
        this.id = id;
    }

    public String getNom() {
        return nom;
    }

    public void setNom(String nom) {
        this.nom = nom;
    }

    public String getSecteur() {
        return secteur;
    }

    public void setSecteur(String secteur) {
        this.secteur = secteur;
    }

    public int getTelephone() {
        return telephone;
    }

    public void setTelephone(int telephone) {
        this.telephone = telephone;
    }

    public int getSpecialite() {
        return specialite;
    }

    public void setSpecialite(int specialite) {
        this.specialite = specialite;
    }
}

问题是,在我生成数据库之后,我希望如果我从数据库中删除文档记录,我希望medecin记录也将被删除但在我的情况下,如果我删除文档记录medecin记录不要删除

1 个答案:

答案 0 :(得分:0)

根据您的配置,Hibernate将生成Document表,其外键指向Medicine表。

为了达到您的要求,它应该是:

public class Document {
  @OneToOne(mappedBy = "document", cascade = CascadeType.REMOVE)
  private Medicine medicine;
}

public class Medicine {
 @OneToOne
 private Document document;
}

<强>更新

public void delete(int id){
    Document document = entityManager.find(Document.class, id);
    entityManager.remove(document);
    entityManager.flush();
}