# createCriteriaInsertValues, createCriteriaInsertSelect, StackOverflowException

**URL:** <https://discourse.hibernate.org/t/createcriteriainsertvalues-createcriteriainsertselect-stackoverflowexception/11307>\
**Category:** Hibernate ORM\
**Created:** [April 1, 2025, 2:57pm UTC](https://discourse.hibernate.org/t/createcriteriainsertvalues-createcriteriainsertselect-stackoverflowexception/11307 "2025-04-01T14:57:15Z")\
**Posts on this page:** 2\
**Page:** 1

<div class="post-metadata">

**Author:** ![Borys\_Makhlin](https://avatars.discourse-cdn.com/v4/letter/b/a8b319/32.png) [@Borys\_Makhlin](https://discourse.hibernate.org/u/Borys_Makhlin)\
**Post date:** [April 1, 2025, 2:57pm UTC](https://discourse.hibernate.org/t/createcriteriainsertvalues-createcriteriainsertselect-stackoverflowexception/11307/1 "2025-04-01T14:57:15Z")

</div>

Hi dear Hibernate community!

We are using `createCriteriaInsertValues`, `createCriteriaInsertSelect` apis, and found out a problem with `onConflict`:

```auto
var insertIntoItem = cb.createCriteriaInsertValues(ItemEntity.class);
insertIntoItem.setInsertionTargetPaths(insertIntoItem.getTarget().get(ItemEntity_.ITEM_ID));
insertIntoItem.values(cb.values(cb.value(UUID.randomUUID())));
insertIntoItem.onConflict().onConflictDoNothing(); // The problem is here.
entityManager.unwrap(Session.class).createMutationQuery(insertIntoItem).executeUpdate();

```

Using of `onConflict` leads to `StackOverflowError`:

```auto
java.lang.StackOverflowError: null
	at org.hibernate.query.sqm.tree.expression.ValueBindJpaCriteriaParameter.copy(ValueBindJpaCriteriaParameter.java:18) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmValues.<init>(SqmValues.java:31) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmValues.copy(SqmValues.java:36) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:82) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:36) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmConflictClause.copy(SqmConflictClause.java:157) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:94) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:36) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmConflictClause.copy(SqmConflictClause.java:157) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:94) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:36) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmConflictClause.copy(SqmConflictClause.java:157) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:94) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:36) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmConflictClause.copy(SqmConflictClause.java:157) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:94) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:36) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmConflictClause.copy(SqmConflictClause.java:157) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:94) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]
	at org.hibernate.query.sqm.tree.insert.SqmInsertValuesStatement.copy(SqmInsertValuesStatement.java:36) ~[hibernate-core-6.5.3.Final.jar:6.5.3.Final]

```

The same is reproducible for `createCriteriaInsertSelect.onConflict` on hibernate-core 6.5.3.Final

The workaround is to turn the copy tree off in the application props: `hibernate.criteria.copy_tree=false`

I’d like to ask, maybe I’m doing something wrong in the code snippet above?

Thank you.

---

<div class="post-metadata">

**Author:** ![Borys\_Makhlin](https://avatars.discourse-cdn.com/v4/letter/b/a8b319/32.png) [@Borys\_Makhlin](https://discourse.hibernate.org/u/Borys_Makhlin)\
**Post date:** [April 1, 2025, 4:02pm UTC](https://discourse.hibernate.org/t/createcriteriainsertvalues-createcriteriainsertselect-stackoverflowexception/11307/2 "2025-04-01T16:02:27Z")

</div>

Seems to be a duplicate of [StackOverflowError when using createCriteriaInsertSelect with onConflict in Hibernate 6.5.3+ (including 7.0.0Beta)](https://discourse.hibernate.org/t/stackoverflowerror-when-using-createcriteriainsertselect-with-onconflict-in-hibernate-6-5-3-including-7-0-0beta/11246)
