Full error is
org.hibernate.tool.schema.spi.CommandAcceptanceException: Error executing DDL "alter table ValidationStep add constraint FKkawiwe2rg1ar6xla3y4gen5aq foreign key (validationStepDraftGroup_id) references ValidationStepDraftGroup (id)" via JDBC Statement
It is about my oneToMany mapping of ValidationStepDraftGroup to validationStep. I appreciate any help
ValidationStepDraftGroup entity
@Entity
public class ValidationStepDraftGroup {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@OneToMany(cascade = CascadeType.ALL, orphanRemoval = true,fetch=FetchType.LAZY)
@JoinColumn(name = "validationStepDraftGroup_id")
private List<ValidationStep> validationSteps;
// no cascade type, you shouldnt be able to modify a automationInformation by saving a ValidationStepDraftGroup
@ManyToOne
@JoinColumn(name= "automation_information_aId", referencedColumnName= "aId")
private AutomationInformation automationInformation;
private String lastUpdatedBy;
private Date lastUpdatedDate;
}
ValidationStep
@Entity
public class ValidationStep {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne
@JoinColumn(name= "automation_information_aId", referencedColumnName= "aId")
private AutomationInformation automationInformation;
private int sequence;
public enum ValidationType {
Email, Document, Sql, Custom
};
@Enumerated(EnumType.STRING)
private ValidationType type;
@OneToOne(cascade = { CascadeType.ALL }, orphanRemoval = true,fetch=FetchType.LAZY)
private EmailDetail emailDetail;
//because the object is lazily fetched
//jackson(the library which converts objects to json) tries to serialize the validation step object before they are fetched
// resulting in an error
// this fixes it
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@OneToOne(cascade = { CascadeType.ALL }, orphanRemoval = true,fetch=FetchType.LAZY)
private DocumentDetail documentDetail;
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
@OneToOne(cascade = { CascadeType.ALL }, orphanRemoval = true,fetch=FetchType.LAZY)
private SqlDetail sqlDetail;
private String description;
@Column(columnDefinition = "boolean default false")
private Boolean isDraft;
Relevant configuration
spring.datasource.type = org.apache.tomcat.jdbc.pool.DataSource
spring.jpa.generate-ddl=true
spring.jpa.hibernate.ddl-auto=create
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect