【发布时间】:2021-10-15 06:11:09
【问题描述】:
在一个 spring boot 项目和数据库 SQL Server 中,我正在做一些插入,我需要返回记录的 id 我有一个字段很少的实体:
public class PackGroupEntity{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long group_id;
private String group;
private String remark;
private String description;
....
}
我简化插入只是为了问问题。
我有一个插入语句,我需要从插入的记录中检索 id。
String query = String.format(
"insert into pack_group(group, remark, description ) " +
"values ( %s, %s, %s)", "a","b","c" );
Query q = entityManager.createNativeQuery(query );
BigInteger biid = (BigInteger) q.getSingleResult();
long id = biid.longValue();
我得到了这个错误
com.microsoft.sqlserver.jdbc.SQLServerException: The statement did not return a result set.
基于这个答案here 我可以使用returning id 所以我尝试了但是:
String query = String.format(
"insert into pack_group(group, remark, description ) " +
"values ( %s, %s, %s ) returning group_id;", "a","b","c" );
Query q = entityManager.createNativeQuery(query );
BigInteger biid = (BigInteger) q.getSingleResult();
long id = biid.longValue();
但它会引发错误
com.microsoft.sqlserver.jdbc.SQLServerException:“返回”附近的语法不正确。
有人可以帮帮我吗?
【问题讨论】:
-
永远不要像这样输入用户字符串。这是一个重大的安全漏洞。从Bobby Tables 了解如何避免它。
标签: java sql-server spring-boot hibernate nativequery