Table relationship> I am trying to insert the data in 3 different tables - JV_SNAPSHOT, JV_GLOBAL_ID, JV_COMMIT. It's corresponding Bean class are given below:
@Entity
@Table(name = "JV_SNAPSHOT")
public class JVSnapshot {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "jv_snapshot_pk_seq")
@SequenceGenerator(name="jv_snapshot_pk_seq", sequenceName = "JV_SNAPSHOT_PK_SEQ")
@Column(name = "SNAPSHOT_PK")
private long snapshotID;
@Column(name="VERSION")
private long version;
@Column(name="GLOBAL_ID_FK")
private long globalID;
@Column(name="COMMIT_FK")
private long commitID;
@Column(name = "TYPE")
private String type;
@Column(name = "MANAGED_TYPE")
private String managedType;
@Column(name = "STATE")
private String state;
@Column(name = "CHANGED_PROPERTIES")
private String changedProperties;
@OneToOne(mappedBy = "jvSnapshot")
//@JoinColumn(name = "id")
private JVGlobalID jvGlobalID;
@OneToOne(mappedBy = "jvSnapshot")
//@JoinColumn(name = "id")
private JVCommit jvCommit;
@Entity
@Table(name = "JV_GLOBAL_ID")
public class JVGlobalID {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "jv_global_id_pk_seq")
@SequenceGenerator(name="jv_global_id_pk_seq", sequenceName = "JV_GLOBAL_ID_PK_SEQ")
@Column(name = "GLOBAL_ID_PK")
private long globalID;
@Column(name = "LOCAL_ID")
private String localID;
@Column(name = "FRAGMENT")
private String fragment;
@Column(name = "TYPE_NAME")
private String typeName;
@Column(name="OWNER_ID_FK")
private long ownerID;
@OneToOne @MapsId
private JVSnapshot jvSnapshot;
@Entity
@Table(name = "JV_COMMIT")
public class JVCommit {
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "jv_commit_pk_seq")
@SequenceGenerator(name="jv_commit_pk_seq", sequenceName = "JV_COMMIT_PK_SEQ")
@Column(name= "COMMIT_PK" , insertable = true, updatable = false)
private long id;
@Column(name = "AUTHOR")
private String author;
@Column(name = "COMMIT_DATE")
private Date commitDate;
@Column(name = "COMMIT_DATE_INSTANT")
@JsonFormat(pattern="yyyy-MM-dd'T'HH:mm:ss.SSSZ")
private String commitDateInstant;
@Column(name="COMMIT_ID")
private long commitId;
@OneToOne @MapsId
private JVSnapshot jvSnapshot;
The Service class where entire business logic to calculate the values and inserting the data is given below:
JVSnapshot jvSnapshot = new JVSnapshot();
//inserting data into JV_GLOBAL_ID table
System.out.println("Inserting in JV_GLOBAL_ID table");
JVGlobalID jvGlobalId = new JVGlobalID();
jvGlobalId.setTypeName("com.dev.neo.models.Customer");
jvGlobalId.setLocalID("99999");
jvCommitGlobalIdRepository.save(jvGlobalId); //globalID generated (PK)
System.out.println("Data inserted in jvcommitGlobalrespository");
//inserting data into JV_COMMIT table
System.out.println("Inserting in JV_COMMIT table");
JVCommit jvCommit = new JVCommit();
List<Long> jvCommitObjectList = jvCommitRepository.getMaxCommitId();
Long commitId = jvCommitObjectList.get(0) + 1;
String pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ";
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(pattern);
String date = simpleDateFormat.format(new Date());
jvCommit.setAuthor(req.getCheckerId());
jvCommit.setCommitDate(new Date());
jvCommit.setCommitDateInstant(date);
jvCommit.setCommitId(commitId);
System.out.println("Data inserted Successfully");
jvSnapshot.setJvCommit(jvCommit);
jvCommitRepository.save(jvCommit); //id generated (PK)
System.out.println("JV_COMMIT Data saved Successfully");
jvSnapshot.setCommitID(jvCommit.getId());
jvSnapshotRepository.save(jvSnapshot);
//inserting data into JV_SNAPSHOT table
System.out.println("Inserting in JV_SNAPSHOT table");
//CLOB Datatypes variables
String existingCustomerIDNew = "somenewString";
String existingCustomerID = "someString";
jvSnapshot.setState(existingCustomerIDNew);
jvSnapshot.setChangedProperties(existingCustomerID);
jvSnapshot.setManagedType("com.dev.neo.models.Customer");
jvSnapshot.setType("UPDATE");
jvSnapshot.setVersion(2);
jvSnapshot.setGlobalID(jvGlobalId.getGlobalID());
System.out.println("Data inserted in all JV");
After all the steps, the data are not reflecting into the tables and getting an error as "Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-02291: integrity constraint (SYSTEM.JV_SNAPSHOT_GLOBAL_ID_FK) violated - parent key not found"
JV_SNAPSHOT_GLOBAL_ID_FK is the foreign key constraint name of "GLOBAL_ID_FK" column of JV_SNAPSHOT table which is linked to primary key column of "GLOBAL_ID_PK" of JV_GLOBAL_ID
I have tried alternative ways of declaring one to one mapping of these tables, but none of the factors worked.
In your Entity JVSnapshot you should edit your mapping like that :
And In your JVGlobalID :
And in JVCommit the same thing like that :