当前位置: 首页 > 知识库问答 >
问题:

使用@NamedQuery的更新查询不能正常工作

翟新
2023-03-14

这是我的DUsers类:

import org.hibernate.annotations.GenericGenerator;

import javax.persistence.*;
import java.util.Date;
import java.util.Objects;

@Entity
@Table(name = "d_users")
@NamedQueries({
        @NamedQuery(name = "bonsai.dropwizard.dao.d.DUsers.findAll",
                query = "select e from DUsers e"),
        @NamedQuery(name = "bonsai.dropwizard.dao.d.DUsers.findById",
                query = "select e from DUsers e "
                        + "where e.oAuthId = :id "),
        @NamedQuery(name = "bonsai.dropwizard.dao.d.DUsers.findByOAuthId",
                query = "select e from DUsers e "
                        + "where e.oAuthId = :oAuthId "),
        @NamedQuery(name = "bonsai.dropwizard.dao.d.DUsers.findByEmail",
                query = "select e from DUsers e "
                        + "where e.email = :email "),
        @NamedQuery(name="bonsai.dropwizard.dao.d.DUsers.confirm",
                query = "update DUsers set status = 'HELLO' where oAuthId = :id")

})
public class DUsers implements IDdbPojo{
    @Id
    @GeneratedValue(generator="system-uuid")
    @GenericGenerator(name="system-uuid", strategy = "uuid")
    private String id;
    private String oAuthId;
    private String oAuthType;


    private String firstName;
    private String secondName;
    private String city;
    private String phone;
    private String email;
    private String profileLink;
    private String profilePic;
    private String status;
    private String notificationToken;
    private boolean confirmed;

    private String password;
    private String notes;
    private java.util.Date created_timestamp;
    private java.util.Date updated_timestamp;
    .. getters and setters on-going

正如您所看到的,我定义了几个@namedqueries,除了最后一个需要更新我的数据库之外,它们都正常工作。为了运行这个查询,我定义了两个函数:

private void confirmMailDAO(String id) {
        namedQuery("bonsai.dropwizard.dao.d.DUsers.confirm").setParameter("id", id);

}

public void confirmMailInternal(String id) {
    Session session = sessionFactory.openSession();
    try{
        ManagedSessionContext.bind(session);
        Transaction transaction = session.beginTransaction();
        try{
            confirmMailDAO(id);
            transaction.commit();
        }catch (Exception e) {
            transaction.rollback();
            throw new RuntimeException(e);
        }
    } finally {
        session.close();
        ManagedSessionContext.unbind(sessionFactory);
    }

}

在此之后,我定义了一个路径,后面跟着一个POST请求,该请求应该更新我的数据库,但遗憾的是,它没有更新我的数据库。

@POST
    @Path("/confirm/{id}")
    public void confirmMail(@NotNull @PathParam("id") String id){
        DUsers user = AppConfig.getInstance().getdUsersDAO().findByIdInternal(id);
        if (user == null) {
            throw new NotAuthorizedException("Error");
        }
        AppConfig.getInstance().getdUsersDAO().confirmMailInternal(id);
    }

有人知道我哪里错了吗?

共有1个答案

佘缪文
2023-03-14

您已在命名查询中设置了param,但忘记执行它。将session传递给您的方法并执行如下:

 private void confirmMailDAO(Session session, String id) {
        Query query = session.getNamedQuery("bonsai.dropwizard.dao.d.DUsers.confirm").setParameter("id", id);
        query.executeUpdate();
}
 类似资料:
  • 问题内容: 我正在尝试使用Elastic Search引擎在mongodb数据库上进行全文搜索,但是遇到一个问题:无论我提供什么搜索字词(或者如果我使用query1或query2),引擎始终会返回相同的结果。我认为问题出在我提出请求的方式上,但我不知道如何解决。 这是代码: 问题答案: 该参数不适用于正在发送的数据。如果要尝试将数据发送到服务器,则应特别使用data参数。如果您尝试发送查询参数,则

  • 我试图更新一个列,我没有修改列值,你能帮我吗? 我正在尝试的代码:- 这就是我得到的错误:

  • 我正在使用MySql工作台执行查询。 但它没有更新行,并显示以下错误: 您正在使用安全更新模式,并且试图更新一个没有使用键列禁用安全模式的WHERE的表,请在Preferences->SQL Editor中切换该选项并重新连接。

  • 问题内容: 我对C#和SQL相当陌生,因此这可能是一个非常容易回答的问题。 我正在尝试通过C#代码向表()添加一行。我已经打开了我的文件,没有任何问题,而且我知道我已连接到正确的数据库,因为一些早期的代码正在查询其中一个表中的行,并且返回正确的键。 将行插入表中的SQL查询是这样的: 我正在使用SQL Server Management Studio Express来查看数据库中的表。运行上述查询

  • 我正试图在按下某个按钮时弹出一个警报对话框。我首先使用了Android Developer的示例代码而不是'这不起作用,所以我根据在这个站点上发现的情况进行了更改,但是现在我的程序在按下按钮后被迫停止。 就你的知识而言,这是在第二个不同于主要的活动中完成的。不确定这是否重要.... ‘ 碰撞日志:“03-25 19:34:24.373:E/AndroidRuntime(18828):致命异常:ma

  • 2,错误{org.apache.directory.server.LDAP.ldapserver}-ERR_171无法将LDAP服务(10,389)绑定到服务注册表。java.net.BindException:已在使用的地址 请帮忙谢谢 --------提示------------------- JAVA_HOME环境变量设置为/opt/java CARBON_HOME环境变量设置为/mnt/1