I am attempting to insert a new record into a table that I know is unique before hand. I have tried calling save() on the object, but that does a bunch of SELECT statements before doing any INSERTs, which I don't want to do because I know the object is already unique.
I am opening a new session for each transaction, which I can see being an issue, but that is a constraint of my domain. Is there some way to force Hibernate to not do any SELECTs before it INSERTs?
Hibernate is trying to determine if the object is transient or not, so is performing a SELECT before INSERT .
The solution is to use @javax. persistence. Version on a new versionNumber column in all the tables. If you have a parent and child table then use @Version column in all the entity classes.
You can use the persist() method rather than save().
https://forum.hibernate.org/viewtopic.php?f=1&t=1011405
However, unlike save(), persist() does not guarantee that the identifier value will be set immediately on the persisted instance.
https://forum.hibernate.org/viewtopic.php?f=1&t=951275
(and you can jump to christian's last post in the thread)
Hibernate is trying to determine if the object is transient or not, so is performing a SELECT
before INSERT
. You might be able to adapt this answer from Hibernate OneToOne mapping executes select statement before insert; not sure why to avoid the SELECT
.
Or, I remember a post in a forum about overriding the version
column that hibernate uses in the transient check (and for optimistic locking). I'll edit this answer when I find it.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With