【问题标题】:Where is the error in hibernate caused by ORA-00932: inconsistent datatypes: expected NUMBER got BINARY由 ORA-00932 引起的休眠错误在哪里:不一致的数据类型:预期的 NUMBER 得到 BINARY
【发布时间】:2015-12-16 00:33:47
【问题描述】:

我通过休眠得到一个异常:

java.sql.BatchUpdateException: ORA-00932: inconsistent datatypes: expected NUMBER got BINARY

究竟是什么错误? 我在tx.commit() 行中有错误:

我只做:

Horario horario = new Horario();
horario.setId(new HorarioId("correo",10,2));

然后

tx = session.beginTransaction();
session.save(horario);
tx.commit();

而 Horario 类是:

public class Horario implements java.io.Serializable {

    private HorarioId id;
    private Datos datos;
    private Serializable entrada;
    private Serializable salida;

    public Horario() {
    }

HorarioId 是

public class HorarioId implements java.io.Serializable {

    private String email;
    private int semana;
    private int dia;

    public HorarioId() {
    }

提前致谢

我以为 hbm 文件是下一个:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 14/12/2015 05:47:47 PM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="hbm.Horario" table="HORARIO">
        <composite-id name="id" class="hbm.HorarioId">
            <key-property name="email" type="string">
                <column name="EMAIL" length="20" />
            </key-property>
            <key-property name="semana" type="int">
                <column name="SEMANA" precision="5" scale="0" />
            </key-property>
            <key-property name="dia" type="int">
                <column name="DIA" precision="5" scale="0" />
            </key-property>
        </composite-id>
        <many-to-one name="datos" class="hbm.Datos" update="false" insert="false" fetch="select">
            <column name="EMAIL" length="20" not-null="true" />
        </many-to-one>
        <property name="entrada" type="serializable">
            <column name="ENTRADA" />
        </property>
        <property name="salida" type="serializable">
            <column name="SALIDA" />
        </property>
    </class>
</hibernate-mapping>

表的关系是:

表 Horario 的列是:

【问题讨论】:

  • 我上传了hbm文件。表“Horario”与表“Datos”有关系
  • 在您提供的代码 sn-p 中,我可以看到您没有在 Horario 的对象中设置 Datos' 对象。所以我认为问题出在你的复合主键上。要确认这一点,请做一件事。从Horario 类和映射文件中删除Datos 条目。同时从Horario 中删除所有其他变量的条目。只保留复合 PK 并尝试执行语句。

标签: java oracle hibernate


【解决方案1】:

问题在于 salidaentrada 的可序列化属性声明。在表中,这些是时间戳,但您已声明休眠它们是可序列化的,这将使其以二进制类型写入对象。这些应更改为时间戳或日期类型。

https://docs.jboss.org/hibernate/orm/3.6/reference/en-US/html/types.html#types-value-basic

【讨论】:

    猜你喜欢
    • 2017-11-26
    • 2019-05-04
    • 2017-04-21
    • 2014-06-06
    • 2017-12-28
    • 1970-01-01
    • 1970-01-01
    • 2018-10-30
    • 1970-01-01
    相关资源
    最近更新 更多