CreateQuery在执行SQL INSERT命令时返回新记录的id

时间:2018-03-09 19:55:15

标签: java

我正在创建User实体的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]

请帮我查找代码错误。

2 个答案:

答案 0 :(得分:0)

尝试这种方法:

Query query = em.createNativeQuery(sql);
BigInteger id= (BigInteger) query.getSingleResult();
long id = id.longValue();

答案 1 :(得分:0)

我发现问题的解决方案是使用createSQLQuery。这是我使用的代码:

UIImageView

记住我正在使用Mysql。