执行本机插入查询后获取实体 ID + Spring JPA
Get Entity ID after executing Native insert query + Spring JPA
我在我的 JPA 存储库中使用本机查询来 运行 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
声明 return 任何东西。根据您的数据库的支持,您可以执行多个语句,例如 INSERT INTO ...; SELECT ...
,但 Spring 数据 JDBC 不支持此。
- 您可以执行
saveNewUser
并按顺序同步执行插入,然后 select。看到这个:https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#repositories.single-repository-behavior.
- 如果您的数据库支持,您可以创建一个执行插入的存储过程,然后 select。
我在我的 JPA 存储库中使用本机查询来 运行 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
声明 return 任何东西。根据您的数据库的支持,您可以执行多个语句,例如 INSERT INTO ...; SELECT ...
,但 Spring 数据 JDBC 不支持此。
- 您可以执行
saveNewUser
并按顺序同步执行插入,然后 select。看到这个:https://docs.spring.io/spring-data/jdbc/docs/current/reference/html/#repositories.single-repository-behavior. - 如果您的数据库支持,您可以创建一个执行插入的存储过程,然后 select。