diff --git a/querydsl-libraries/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java b/querydsl-libraries/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java index 82d63652a..47e919d30 100644 --- a/querydsl-libraries/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java +++ b/querydsl-libraries/querydsl-jpa/src/main/java/com/querydsl/jpa/JPQLSerializer.java @@ -321,16 +321,17 @@ public void serializeForInsert( } append(")"); } else if (inserts != null && !inserts.isEmpty()) { + append(VALUES); + append(" ("); first = true; for (Map.Entry, Expression> entry : inserts.entrySet()) { if (!first) { append(", "); } - handle(entry.getKey()); - append(" = "); handle(entry.getValue()); first = false; } + append(")"); } else { serialize(query.getMetadata(), false, null); } diff --git a/querydsl-libraries/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java b/querydsl-libraries/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java index 47dc4ba9e..2be7a1398 100644 --- a/querydsl-libraries/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java +++ b/querydsl-libraries/querydsl-jpa/src/test/java/com/querydsl/jpa/JPQLSerializerTest.java @@ -20,6 +20,7 @@ import com.querydsl.core.JoinType; import com.querydsl.core.QueryMetadata; import com.querydsl.core.domain.QCat; +import com.querydsl.core.types.ConstantImpl; import com.querydsl.core.types.EntityPath; import com.querydsl.core.types.Expression; import com.querydsl.core.types.Path; @@ -28,6 +29,9 @@ import com.querydsl.core.types.dsl.*; import com.querydsl.jpa.domain.*; import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; import org.junit.Test; public class JPQLSerializerTest { @@ -604,4 +608,46 @@ public void subquery_in_select_clause_with_modifiers_hql() { assertThat(hqlSerializer.getConstants().get(0)).isEqualTo(1); assertThat(hqlSerializer.getConstants().get(1)).isEqualTo(2); } + + @Test + public void serializeForInsert_setStyle_emitsValuesForm() { + var cat = QCat.cat; + QueryMetadata md = new DefaultQueryMetadata(); + md.addJoin(JoinType.DEFAULT, cat); + + Map, Expression> inserts = new LinkedHashMap<>(); + inserts.put(cat.name, ConstantImpl.create("Bobby")); + inserts.put(cat.alive, ConstantImpl.create(false)); + + var serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + serializer.serializeForInsert(md, inserts.keySet(), Collections.emptyList(), null, inserts); + + var sql = serializer.toString(); + assertThat(sql).startsWith("insert into Cat (name, alive)"); + assertThat(sql).contains("\nvalues "); + assertThat(sql).endsWith("(?1, ?2)"); + assertThat(sql).doesNotContain(" = "); + assertThat(serializer.getConstants()).containsExactly("Bobby", false); + } + + @Test + public void serializeForInsert_columnsValuesStyle_unchanged() { + var cat = QCat.cat; + QueryMetadata md = new DefaultQueryMetadata(); + md.addJoin(JoinType.DEFAULT, cat); + + var serializer = new JPQLSerializer(HQLTemplates.DEFAULT); + serializer.serializeForInsert( + md, + Arrays.asList(cat.name, cat.alive), + Arrays.asList("Bobby", false), + null, + Collections.emptyMap()); + + var sql = serializer.toString(); + assertThat(sql).startsWith("insert into Cat (name, alive)"); + assertThat(sql).contains("\nvalues "); + assertThat(sql).endsWith("(?1, ?2)"); + assertThat(serializer.getConstants()).containsExactly("Bobby", false); + } }