Reputation: 477
Is it possible to bind parameter from dto in sppring data jpa native sql?
Here example. I have native sql with a lot of parametr
@Entity
@Table(name = "my_very_usefull_field_tbl")
@NamedNativeQuery(
name = INSERT_IGNORE_CONFLICT,
query = "INSERT INTO my_very_usefull_field_tbl\n" +
"(\n" +
" field1, \n" +
...
" field50, \n" +
")\n" +
"VALUES(\n" +
" :fieldDto.field1,\n" +
...
" :fieldDto.field50 -- modify_author\n" +
") on conflict do nothing;"
)
public class MyVeryUsefullFieldEntity {
@Id
private String id;
@Column(name = "field1")
private String field1;
@Column(name = "field2")
private String field2;
...
@Column(name = "field50")
private String field50;
}
public interface MyVeryUsefullFieldRepository extends CrudRepository<MyVeryUsefullFieldEntity, String> {
String INSERT_IGNORE_CONFLICT = "INSERT_IGNORE_CONFLICT";
@Modifying
@Query(name = INSERT_IGNORE_CONFLICT, nativeQuery = true)
int insertIgnoreConflict(@Param("fieldDto") MyVeryUsefullFieldDto fieldDto);
}
Everything work fine when if I specify each flild in MyVeryUsefullFieldRepository#insertIgnoreConflict
method (50 input parameters). But method with a lot parameter looks terrible. I want to reffer to dto field inside sql and pass dto into insertIgnoreConflict
method. But nothing worked for me. I try to bind like example above. Not worked. I try to bind throw spell :#{#fieldDto.field1}
. Application not started with exception: Space is not allowed after parameter prefix ':'
.
Can anyone give me some advice on how to do it?
Upvotes: 2
Views: 271