Not-null property references a transient value - transient instance must be saved before current operation
Solution 1:
Try putting CascadeType.ALL
@OneToOne(fetch = FetchType.EAGER,cascade=CascadeType.ALL)
@JoinColumn(name="COUNTRY_ID", nullable=false)
private Country country;
Solution 2:
I had a similar problem. Two entities: Document and Status.
Document had a relationship OneToMany
with Status, that represented the history of Status the Document had.
So, there was a @NotNull
@ManyToOne
reference of Document inside Status.
Also, I needed to know the actual Status of Document. So, I needed another relationship, this time @OneToOne
, also @NotNull
, inside Document.
The problem was: how can I persist both entities the first time if both had a @NotNull
reference to the other?
The solution was: remove @NotNull
reference from actualStatus
reference. This way, it was able to persist both entities.
Solution 3:
I had the exact same problem. The solution seems to be to send the JSON like this:
{
"firstname": "Tapas",
"lastname": "Jena",
"city": "Hyderabad",
"country": {"id":"1"}
}
I guess @RequestBody
tries to map an entity not a single field since the Customer instance is referencing a Country instance.
(I have similarly two entities, joined. In the DB, records for the referenced entity (Country in your case) were already created but the entity creation (Customer in your case) with a json, provided the same error message. For me CascadeType.ALL not helped but the above written change in the JSON solved the problem. For further config of course CascadeType can be considered.)