theSemenov
theSemenov

Reputation: 477

How to bind named parameter from dto in native query in Spring data jpa

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

Answers (0)

Related Questions