java - 执行 native 插入查询+ Spring JPA后获取实体ID

标签 java spring-boot hibernate spring-data-jpa

我在我的 JPA 存储库中使用 native 查询来运行 INSERT 查询 - 因为,我无法通过 JPA 运行一些查询。

String INSERT_USER_IN_TO_DATABASE = "INSERT INTO USER_MASTER " +
            "(" +
            "MOBILE_X,USER_TYPE,COUNTRYCODE,USER_N,USER_LAST_N,GENDER,DOB) " +
            "VALUES ( " +
            "EncryptByKey(Key_GUID(convert(varchar,?1)), ?2)," +
            "1,+91,?3,?4,?5,?6" +
            ")";

    @Query(value = INSERT_USER_IN_TO_DATABASE, nativeQuery = true)
    @Modifying
    UserMasterEntity saveNewUser(String encryptionKey,
                                 String phoneNumber,
                                 String name,
                                 String lastName,
                                 String gender,
                                 String dob);

我的意图是执行 INSERT 语句并获取 userMaster 实体。但是我得到以下异常

Caused by: java.lang.IllegalArgumentException: Modifying queries can only use void or int/Integer as return type! Offending method: public abstract com.officeride.fileprocess.job.bulkuser.UserMasterEntity com.officeride.fileprocess.job.bulkuser.UserMasterRepository.saveNewUser(java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String,java.lang.String)

我在我的实体中也使用了 @ColumnTransformer 东西,但没有任何效果。

如何解决这个问题?

最佳答案

您不能使 INSERT INTO 语句返回任何内容。根据数据库的支持,您可以执行多个语句,例如 INSERT INTO ...; SELECT ...,但是 Spring Data JDBC 不支持这个。

关于java - 执行 native 插入查询+ Spring JPA后获取实体ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70145459/

相关文章:

java - Hibernate @OneToOne 无法添加或更新子行 : a foreign key constraint

javascript - H2 DB DAY_OF_WEEK 从星期一开始

java - 现有对象的编辑应该在存储库层还是在服务中完成?

java - 在 Clojure/Java 中检测 Unicode 文本连字

java - 为什么liquibase无法解析db.changelog类路径?

java - 如何在不更改 Spring Boot 中的实际类的情况下远程创建 bean?

java - 如何更改Spring Cloud GCP的依赖版本

java - 比较器和一致等于 : How?(最佳实践)

java - @WebParam 在 jetty 服务 SOAP 中始终为空

java - 如何在 Java 6 中使用为 Java 7 编译的库?