我們無法刪除父級(Solicitud)定義爲級聯的子實體(SolicitudArxiu),如我們可以在下面看到的。無法刪除OneToMany與JPA的子實體關係
似乎父級(級聯)實體中關係的定義影響從子級刪除,因爲當我刪除級聯時,刪除就起作用。
是否存在強制刪除小孩(SolicitudArxiu)的表單?
SolicitudArxiuManager(子實體刪除)
public void delete(int id) {
try {
SolicitudArxiu reference = this.em.getReference(SolicitudArxiu.class, id);
this.em.remove(reference);
} catch (EntityNotFoundException e) {
//we want to remove it
logger.error("Entity not found exeption: ", e);
}
}
Solicitud(母公司)
@Entity
@Table(name = "t_solicitud")
public class Solicitud implements Serializable {
...
@OneToMany(mappedBy = "solicitud", cascade = CascadeType.ALL, orphanRemoval = true,
fetch = FetchType.EAGER)
private Collection<SolicitudArxiu> sarxius;
...
SolicitudArxiu.java
@Entity
@Table(name = "r_solicitudArxiu",
uniqueConstraints = @UniqueConstraint(columnNames = {"idSolicitud","idArxiu"}))
public class SolicitudArxiu implements Serializable {
...
@ManyToOne
@Basic(optional = false)
@JoinColumn(name = "idSolicitud", referencedColumnName = "id",
foreignKey = @ForeignKey(name = "solicitudArxiu2solicitud"))
private Solicitud solicitud;
@ManyToOne
@Basic(optional = false)
@JoinColumn(name = "idArxiu", referencedColumnName = "id",
foreignKey = @ForeignKey(name = "solicitudArxiu2arxiu"))
private Arxiu arxiu;
...
這就是我想要做的,我試圖刪除t_solicitud和t_arxiu之間的關係,但是在執行em.remove之後,實體仍然存在。 ¿? – Joe
如果您在刪除實體時使用jpa 2.0或更高版本,則子級將保留,除非您將orphanRemoval定義爲true,因此要麼刪除該關係,然後刪除該實體,要麼將orphanRemoval定義爲true,以便在關係被刪除時子代將被刪除 –
@Joe我剛剛注意到你已經有了orphanRemoval設置,然後刪除關係就足以刪除子節點 –