Would it not be possible to cascade the saving with the annotation @OneToOne(cascade = CascadeType.PERSIST) in the class Object?
I would then create the two objects with the available details, set the relationship and save the class Object.
object.setObjectDetail(objectDetail);
objectdetail.setObject(object);
repository.save(object);
The key of object would be set automatically and objectDetail would get the key from object.
Edit: Entity Example
I was slightly surprised that the code did not work. Therefore, I implemented this for myself. It works perfectly with Spring Boot version 2.3.2.RELEASE and spring-boot-starter-data-jpa.
Your issue might be @OneToOne(mappedBy = "obejctTwo") because this mapping does not exist.
Object
@Entity
public class Object {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long refnno;
@OneToOne(mappedBy = "object",
cascade = CascadeType.ALL,
orphanRemoval = true)
private ObjectDetail objectDetail;
private String type;
private String status;
public setObjectDetail(ObjectDetail objectDetail) {
this.objectDetail = objectDetail;
objectDetail.setObject = this;
}
// Getters and remaining setters...
}
I added a slightly modified setter for objectDetail which helps to keep the bidirectional OneToOne mapping synchronised.
BTW: I changed the datatype of refnno to the object Long. Classes are considered to be better for database entities because than you can test them properly for null. Furthermore, this id can then be used for a JpaRepository<Object, Long>.
ObjectDetail
@Entity
public class ObjectDetail {
@Id
private Long refnno;
@OneToOne
@JoinColumn(name = "refnno")
@MapsId
private Object object;
private String policyNo;
private String depNo;
// Getters and setters...
}
Repository and Execution
I created a simple repository.
public interface ObjectRepository extends JpaRepository<Object, Long> {
}
I then used the save(Object entity) method to persist a new Object with a new ObjectDetail.
Object object = new Object();
object.setType("new");
ObjectDetail objectDetail = new ObjectDetail();
objectDetail.setPolicyNo = "999";
object.setObjectDetail(objectDetail);
objectRepository.save(object);