Błąd przy usuwaniu obiektu z relacją do innej tabeli

0

Cześć,
mam dwie tabele, Part i Comm. W Part mam zdefiniowaną listę komentarzy typu Comm z relacją OnetoMany, a w Comm mam pole typu Part z relację ManytoOne. Każdy komentarz ma swoje unikalne id, niezależnie pod którym obiektem Part jest. Rozumiem, Dodawanie działa prawidłowo, gdy usuwam obiekt Part bez komentarzy też jest ok, ale gdy dodam komentarz to nie mogę usuwać ani obiektu Part ani komentarza, błąd:

Internal Exception: java.sql.SQLIntegrityConstraintViolationException: integrity constraint violation: foreign key no action; FK_COMM_PART_ID table: COMM
Error Code: -8
Call: DELETE FROM PART WHERE (ID = ?)
	bind => [1 parameter bound]
Query: DeleteObjectQuery(domain.Part@463ec500)

Rozumiem, że mam poprawić relacje między tabelami, czy lepiej inaczej stworzyć query?
Part:

package domain;

import java.util.ArrayList;
import java.util.List;
import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlTransient;


@XmlRootElement
@Entity
@NamedQueries({
        @NamedQuery(name = "part.all" , query = "SELECT p FROM Part p"),
        @NamedQuery(name = "part.id", query = "FROM Part p WHERE p.id=:partId"),
        @NamedQuery(name = "part.price", query = "FROM Part p WHERE p.price BETWEEN :priceLow AND :priceHigh"),
        @NamedQuery(name = "part.name" , query = "FROM Part p WHERE p.name=:name"),
        @NamedQuery(name = "part.category", query = "FROM Part p WHERE p.category=:category")
        
})
public class Part {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String name;
    private int price;
    private String category;

    @XmlTransient
    @OneToMany(cascade={CascadeType.PERSIST, CascadeType.REMOVE}, mappedBy="part", orphanRemoval = true)

    private List<Comm> comments = new ArrayList<Comm>();
    
    public List<Comm> getComments() {
        return comments;
    }

    public void setComments(List<Comm> comments) {
        this.comments = comments;
    }
    
    public int getId() {
        return id;
    }

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

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getPrice() {
        return price;
    }

    public void setPrice(int price) {
        this.price = price;
    }

    public String getCategory() {
        return category;
    }

    public void setCategory(String category) {
        this.category = category;
    }


}

Comm:

package domain;

import javax.persistence.*;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
@Entity
@NamedQueries({

        @NamedQuery(name = "comm.comment",  query = "FROM Comm c WHERE c.id = :commentId")
})
public class Comm {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;
    private String content;

    @ManyToOne
    private Part part;

    public int getId() {
        return id;
    }

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

    public String getContent() {
        return content;
    }

    public void setContent(String content) {
        this.content = content;
    }

    public Part getPart() {
        return part;
    }

    public void setPart(Part part) {
        this.part = part;
    }

}

Usuwanie komentarzy:

  @DELETE
    @Path("/comments/{id}")
    public Response deleteComment(@PathParam("id") int id){

        Comm result = em.createNamedQuery("comm.comment", Comm.class)
                .setParameter("commentId", id )
                .getSingleResult();

        if (result == null) {
            return Response.status(404).build();
        }
        em.remove(result);
        return Response.ok(result).build();
    }
0

Ten komunikat błędu na pewno pochodzi z pokazanej operaji? Czyli z usuwania komentarza?

1 użytkowników online, w tym zalogowanych: 0, gości: 1