当前位置: 首页 > 面试题库 >

如何在Hibernate查询中将Integer参数设置为null?

袁耀
2023-03-14
问题内容

我有一个实体:

    @Entity
    @Table(name = "smsc.security_users")
    public class User {

        @Id
        @Column(name = "id")
        private int id;

        @Column(name = "username")
        private String username;

        @Column(name = "password")
        private String password;

        @Column(name = "enabled")
        private int enabled;

        @Column(name = "master_id", nullable = true)
        private Integer master_id;

        @Temporal(TemporalType.TIMESTAMP)
        @Column(name = "passwordExpiration")
        private Date passwordExpiration;

        public String getUsername() {
            return username;
        }
        ...

我在说master_id。这是我的DAO方法:

public void add(String userName, String password, Integer master_id) {
        Session session = null;
        session = this.sessionFactory.getCurrentSession();
        Query query = session
                .createSQLQuery(
                        "INSERT INTO smsc.security_users(id,username,password,enabled,passwordExpiration,master_id) VALUES(smsc.SeqDictID.nextval+1,:userName,:password,1,:passwordExpiration,:master_id)")
                .setString("userName", userName)
                .setString("password", Sha1.getHash(password))
                .setTimestamp("passwordExpiration", DateUtil.getTomorrow())
                .setInteger("master_id", master_id);
        int updated = query.executeUpdate();

    }

日志说:

请求处理失败;嵌套的异常是java.lang.NullPointerException

并将指针放在这一行:

.setInteger("master_id", master_id);

master_id有时必须为null。那么如何设置null?


问题答案:

如果您查看Query类的文档,setInteger()方法,

Query setInteger(String name,int val)

它以名称和 原始类型int 作为参数。

当您在 自动装箱 期间传递值为null的包装器类型Integer时,会发生空指针Exception。

例如:

Integer x = null;
int y = x;  // gives a nullpointer exception.

你可以用

Query setParameter(String name,
                   Object val,
                   Type type);

设置空值的方法。

也可以看看:
```



 类似资料:
  • 问题内容: 给出以下HQL查询: 我使用Query对象的方法进行设置。 我想使用对象进行设置,但是在查看Hibernate文档和方法列表时,我看不出要使用哪种明显的选择。有任何想法吗? 问题答案: 使用,的Javadoc在这里。 有四种变体可供选择。

  • 问题内容: 如何将hibernate参数设置为“空”?例: 就我而言,状态字符串可以为null。我已经调试了它,然后hibernate,然后生成了这样的SQL字符串/查询..... 但这在MYSQL中不起作用,因为正确的SQL语句必须为“ ”(Mysql无法理解status=null并对此进行评估为false,因此根据我已阅读的mysql文档,查询将不会返回任何记录…) 我的问题: 为什么不将空字

  • 问题内容: 嗨,我有一个命名查询 我想这样设置限制: 但这在服务器启动时显示错误。我正在使用以下代码在DAO类中调用查询: 需要设置开始和结束参数。请帮忙。 问题答案: 正如@DataNucleus所说,LIMIT在JPQL中不是有效的关键字。这不是指定要返回多少行的方法。这是您的操作方式: 这将是调用命名查询的代码:

  • 问题内容: 我有这样的HQL: 问题是它不理解关键字。有没有一种方法可以运行这样的查询而不将其分为两个子查询? 问题答案: 看一下如何在HQL中进行限价查询? 您不能用hql限制用hql编写的查询。您需要调用Query对象上的setMaxResults,我想这将阻止您对hql子查询施加限制。 这使您可以选择 将其编写为sql查询或 尝试寻找另一种编写hql查询的方法,以便您在子查询中不需要限制。

  • 问题内容: 这是我的PostgreSQL函数: 它有一个参数,我想通过JPQL 将Java传递给它: 上面的代码失败,但例外: 所以我不确定如何从EclipseLink调用我的函数。 问题答案: 通过将String []类型的Java数组传递给您进行测试,以进行测试。似乎PgJDBC不接受Java数组作为带有或不带有参数的参数。 合规 JDBC规范 16.5“数组对象” 建议JDBC 部分存在,因

  • 我想使搜索页面后,我点击它的按钮将被重定向到另一个页面。这一页将是这样的 还有我的路由器看起来像这样 问题是如何在Vue中获取目标页面中的查询值。JS3?这个答案仍然让我困惑,因为没有使用CompositionAPI,也没有在VueJS3中使用