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;
}