相关疑难解决方法(0)

Hibernate:如何使用HQL设置NULL查询参数值?

如何将Hibernate参数设置为"null"?例:

Query query = getSession().createQuery("from CountryDTO c where c.status = :status  and c.type =:type")
.setParameter("status", status, Hibernate.STRING)
.setParameter("type", type, Hibernate.STRING);
Run Code Online (Sandbox Code Playgroud)

在我的例子中,状态String可以为null.我调试了这个,然后hibernate然后生成一个像这样的SQL字符串/查询.... status = null但是这在MYSQL中不起作用,因为正确的SQL语句必须是" status is null"(Mysql不理解status = null并且计算这个为了没有任何记录将被返回查询,根据我读过的mysql文档...)

我的问题:

  1. 为什么没有Hibernate正确地将空字符串转换为"is null"(而且错误地创建"= null")?

  2. 重写此查询以使其为空安全的最佳方法是什么?使用nullsafe,我的意思是,如果"status"字符串为null,则应该创建"is null"?

非常感谢你!蒂姆

java null hibernate

57
推荐指数
5
解决办法
12万
查看次数

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
查看次数

不一致的数据类型:预期NUMBER得到BINARY

我是Hibernate的新手,我正在尝试对我创建的oracle数据库进行"简单"用户插入.

我使用Netbeans Hibernate向导创建了所有必需的文件:hibernate.cfg.xml,hibernate,reveng.xml,Users.hbm.xml,Users.java

如果我使用oracle sql developer插入用户,我可以从java代码中获取此用户.但是,如果我试图插入用户,我会收到错误:不一致的数据类型:预期NUMBER得到了BINARY.

部分Users.hbm.xml:

<hibernate-mapping>
  <class name="HibernateDB.Users" schema="SYSTEM" table="USERS">
    <id name="userid" type="int">
      <column name="USERID" precision="9" scale="0"/>
      <generator class="increment"/>
    </id>
    ...
Run Code Online (Sandbox Code Playgroud)

部分Users.java:

public class Users implements java.io.Serializable
{

    private int userid;
    private String username;
    private String password;
    private String firstName;
    private String lastName;
    private Serializable dateOfBirth;
    private Serializable registrationDate;
    ...
Run Code Online (Sandbox Code Playgroud)

部分insertUser方法(所有参数都是字符串):

    session = HibernateUtil.currentSession();
    Transaction tx = session.beginTransaction();
    Calendar dOfBirth = Calendar.getInstance();
    dOfBirth.set(Integer.parseInt(year_of_birth), Integer.parseInt(month_of_birth), Integer.parseInt(day_of_birth));
    Calendar regDate = Calendar.getInstance();
    Timestamp dOfBirthTS = new Timestamp(dOfBirth.getTimeInMillis());
    Timestamp regDateTS = new …
Run Code Online (Sandbox Code Playgroud)

java oracle hibernate

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

标签 统计

hibernate ×3

java ×3

null ×1

oracle ×1