繁体   English   中英

执行SQL INSERT命令时,CreateQuery返回新记录的ID。

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM