相关疑难解决方法(0)

Oracle列上的HQL"为null"和"!= null"

是否冬眠转换column != nullHQLcolumn is nullSQL

oracle null hibernate

53
推荐指数
3
解决办法
10万
查看次数

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

我有一个实体:

    @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;
        }
        ...
Run Code Online (Sandbox Code Playgroud)

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

public void add(String userName, String password, Integer master_id) {
        Session session = null;
        session = this.sessionFactory.getCurrentSession();
        Query query = …
Run Code Online (Sandbox Code Playgroud)

java hibernate

18
推荐指数
2
解决办法
3万
查看次数

休眠,检查对象是否存在和空值

我正在使用 hibernate 将记录(即对象)保存到数据库中。在保存我的对象之前,我想验证数据库是否已经包含这个对象。(主键只是一个增量键,不能用于此目的。)

我正在运行创建一个 HQL 语句来检查具有这些属性的记录的存在(即column1-3)。

结果查询应如下所示:

from myTable where column1 is null and column2 = :column2 and column3 = :column3'
Run Code Online (Sandbox Code Playgroud)

因为有时列可以包含空值,我检查属性的值,如果它是空值,那么我在这个查询中使用 ais而不是 a =(例如column1 is :column1在上面的语句中)。

因为我开始意识到我正在做很多工作来实现一些相对重要的事情,我开始怀疑我是否在正确的轨道上。有没有更简单的方法来检查对象的存在?

编辑:我稍微改写我的问题后,我意识到, column1 is :column1当不工作:column1参数设置为null。显然,似乎按预期工作的唯一语法是column1 is null. 因此,似乎您在搜索null值时不能使用通配符。但这并没有改变我问题的主要方面:我真的应该在运行时检查所有这些东西吗?

java hibernate h2

5
推荐指数
1
解决办法
5259
查看次数

Hibernate 预期 NUMBER 在空字段上得到 BINARY

我不明白为什么 Hibernate 试图在它为空时将此字段设置为 VARBINARY。

Java 数据类型为 BigDecimal Oracle 数据类型为 Float

它是这样设置的:

entityManager.createNamedQuery("blah").setParameter("target_field", object.sourceValue)
Run Code Online (Sandbox Code Playgroud)

再次 - sourceValue 是一个 BigDecimal,当我调试它时,该值为空。

当它尝试执行此更新时,我收到 oracle 错误:

ORA-00932: inconsistent datatypes: expected NUMBER got BINARY
Run Code Online (Sandbox Code Playgroud)

这是控制台日志中此属性的显示内容:

o.h.type.descriptor.sql.BasicBinder      : binding parameter [8] as [VARBINARY] - [null]
Run Code Online (Sandbox Code Playgroud)

如果我在执行更新之前在 Java 中做了这个愚蠢的 hack:

if (object.sourceValue == null) object.sourceValue = new java.math.BigDecimal(0);
Run Code Online (Sandbox Code Playgroud)

然后它运行良好。所以这个错误的原因绝对不是当字段为空时hibernate做错了什么。

我该如何解决这个问题,以便我可以将字段设置为 null 而不会在休眠状态下对其进行错误处理?

在数据库中,该字段可以为空。

java hibernate

5
推荐指数
1
解决办法
9426
查看次数

标签 统计

hibernate ×4

java ×3

h2 ×1

null ×1

oracle ×1