Force Hibernate Insert Without Select Statements

前端 未结 3 1051
孤城傲影
孤城傲影 2020-12-06 17:44

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

相关标签:
3条回答
  • 2020-12-06 18:24

    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)

    0 讨论(0)
  • 2020-12-06 18:39

    Hibernate doesn't issue a select to see if an object is unique upon a save(). In point of fact, Hibernate doesn't even issue an insert when you call save(). That happens when you flush() or commit the transaction. You'll need to find out exactly what the selects are for and what's initiating them. To help narrow it down, you could write a quick test like

    Session session = openSession();
    Transaction tx = session.beginTransaction();
    session.save(myObject);
    tx.commit();
    

    and see what statements that produces.

    0 讨论(0)
  • 2020-12-06 18:47

    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.

    0 讨论(0)
提交回复
热议问题