Getting ConstraintViolationException when trying to delete

Viewed 26

The aim is; when trying to delete data from document type, delete a relation between with meta data which is DocumentTypeMetaData (entity). Don't want to delete meta data or document meta data. But with these entities it didn't worked. I have just tried some cascadeTypes but I didn't reach the success.

Trying to delete DocumentType entity and getting this error;

could not execute batch; SQL [delete from PROTO.document_type where id=?]; constraint [PROTO.DOCUMENT_TYPE_META_DATA_FK_DOCUMENT_TYPE_ID]; nested exception is org.hibernate.exception.ConstraintViolationException: could not execute batch

There are my entities; Document Type;

public class DocumentType extends AuditableEntity {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
        name = "UUID",
        strategy = "org.hibernate.id.UUIDGenerator"
)
@Column(name = "ID", unique = true, nullable = false)
private UUID id;

@Column(name = "PRIVACY", nullable = false)
private String privacy;

@Enumerated(EnumType.STRING)
@Column(name = "STATUS", nullable = false)
private Status status = Status.ACTIVE;

@ManyToOne(fetch = FetchType.LAZY)
@JsonIgnore
@JoinColumn(name = "DOCUMENT_CLASS_ID", referencedColumnName = "ID")
private DocumentClass documentClass;

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
@JoinColumn(name = "I18N_ID", referencedColumnName = "ID")
private I18N i18N;

@OneToMany(fetch = FetchType.LAZY, mappedBy = "documentType", cascade = CascadeType.ALL)
private Set<DocumentTypeMetaData> documentTypeMetaData = new HashSet<>();

@OneToMany(
        fetch = FetchType.LAZY,
        cascade = CascadeType.ALL,
        mappedBy = "documentType")
private Set<Document> documents = new HashSet<>();}

Meta Data;

public class MetaData extends AuditableEntity {
    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
            name = "UUID",
            strategy = "org.hibernate.id.UUIDGenerator"
    )
    @Column(name = "ID", unique = true, nullable = false)
    private UUID id;

    @Column(name = "STATUS", nullable = false)
    @Enumerated(EnumType.STRING)
    private Status status;

    @OneToOne(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
    @JoinColumn(name = "I18N_ID", referencedColumnName = "ID")
    private I18N i18N;

    @OneToMany(fetch = FetchType.LAZY, mappedBy = "metaData", cascade = CascadeType.ALL)
    private Set<DocumentTypeMetaData> documentTypeMetaData = new HashSet<>();

    @Column(name = "UNIQUE_NAME", nullable = false, unique = true)
    private String uniqueName;

    @Column(name = "DISPLAY_TYPE", nullable = false)
    private String displayType;

    @Column(name = "REGEXP")
    private String regexp;

    @Column(name = "BY_DEFAULT", nullable = false)
    private Boolean byDefault;
}

Relation Table DocumentTypeMetaData

public class DocumentTypeMetaData extends AuditableEntity {
    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
            name = "UUID",
            strategy = "org.hibernate.id.UUIDGenerator"
    )
    @Column(name = "ID", unique = true, nullable = false)
    private UUID id;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "DOCUMENT_TYPE_ID", referencedColumnName = "ID", nullable = false)
    @JsonIgnore
    private DocumentType documentType;

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "META_DATA_ID", referencedColumnName = "ID", nullable = false)
    @JsonIgnore
    private MetaData metaData;

    @Column(name = "REQUIRED", nullable = false)
    private Boolean required;

    @Column(name = "SINGULAR", nullable = false)
    private Boolean singular;

    @Column(name = "VISIBLE_ON_SCREEN", nullable = false)
    private Boolean visibleOnScreen;

    @Enumerated(EnumType.STRING)
    @Column(name = "STATUS", nullable = false)
    private Status status = Status.ACTIVE;

    @OneToMany(
            fetch = FetchType.LAZY,
            cascade = CascadeType.ALL,
            mappedBy = "documentTypeMetaData")
    private Set<DocumentMetaData> documentMetadata = new HashSet<>();

    public void addDocumentMetaData(DocumentMetaData documentMetaData) {
        if(this.documentMetadata == null) {
            this.documentMetadata = new HashSet<>();
        }
        documentMetaData.setDocumentTypeMetaData(this);
        this.documentMetadata.add(documentMetaData);
    }
}

Document Meta Data;

public class DocumentMetaData extends AuditableEntity {
    @Id
    @GeneratedValue(generator = "UUID")
    @GenericGenerator(
            name = "UUID",
            strategy = "org.hibernate.id.UUIDGenerator"
    )
    @Column(name = "ID", unique = true, nullable = false)
    private UUID id;

    @Column(name = "META_DATA_VALUE", nullable = false)
    private String metaDataValue;

    @Enumerated(EnumType.STRING)
    @Column(name = "STATUS", nullable = false)
    private Status status = Status.ACTIVE;

    @ManyToOne(fetch = FetchType.LAZY)
    @JsonIgnore
    @JoinColumn(name = "DOCUMENT_TYPE_META_DATA_ID")
    private DocumentTypeMetaData documentTypeMetaData;


    @ManyToOne(fetch = FetchType.LAZY)
    @JsonIgnore
    @JoinColumn(name = "DOCUMENT_REVISION_ID")
    private DocumentRevision documentRevision;
}
0 Answers
Related