[英]CreateQuery returning the id of the new record when executing the SQL INSERT command
我正在创建用户实体的DAO。 我正在执行save方法,我希望它返回创建的对象或创建的对象的ID。 类似于JPARepository的saveAndFlush。 下面是UserDAO类的save方法的代码:
public long save(User newUser) {
String query = "insert into user (email,password,name,tenant) values(?,?,?,?) returning id";
TypedQuery<Usuario> q = em.createQuery(query, User.class);
q.setParameter(1, newUser.getCredencials().getEmail())
.setParameter(2, newUser.getCredenciaals().getPassword()).setParameter(3, newUser.getName())
.setParameter(4, newUser.getTenant());
Usuario userSave = q.getSingleResult();
long id = userSave.getId();
return userSave;
}
我的代码未运行。 您在控制台上遇到以下错误:
antlr.NoViableAltException: unexpected token: values
org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: values near line 1, column 47 [insert into usuario (email,senha,nome,tenant) values(?,?,?,?) returning id]
请帮助我找到代码错误。
试试这个方法:
Query query = em.createNativeQuery(sql);
BigInteger id= (BigInteger) query.getSingleResult();
long id = id.longValue();
我为我的问题找到的解决方案是使用createSQLQuery。 这是我使用的代码:
EntityManagerFactory emFactory = em.getEntityManagerFactory();
SessionFactory sessionFactory = emFactory.unwrap(SessionFactory.class);
Session session = sessionFactory.openSession();
Transaction txn = session.beginTransaction();
String query = "insert into user (email,password,name,tenant) values(?,?,?,?)";
session.createSQLQuery(query).setParameter(0, newUser.getCredenciais().getEmail())
.setParameter(1, newUser.getCredenciais().getPassword()).setParameter(2, newUser.getName())
.setParameter(3, newUser.getTenant()).executeUpdate();
BigInteger result = (BigInteger) session.createSQLQuery("SELECT LAST_INSERT_ID()").uniqueResult();
txn.commit();
session.close();
记住我正在使用Mysql。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.