Java 数据类型不一致:应为二进制数

Java 数据类型不一致:应为二进制数,java,oracle,hibernate,Java,Oracle,Hibernate,我不熟悉Hibernate,我正在尝试将一个“简单”的用户插入到我创建的oracle数据库中 我使用Netbeans Hibernate向导创建了所有必要的文件: hibernate.cfg.xml、hibernate、reveng.xml、Users.hbm.xml、Users.java 如果我使用OracleSQL开发人员插入用户,我可以从java代码中获取该用户。但如果我试图插入一个用户,我会得到一个错误:不一致的数据类型:预期的数字是二进制的 部分用户.hbm.xml: <hibe

我不熟悉Hibernate,我正在尝试将一个“简单”的用户插入到我创建的oracle数据库中

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

如果我使用OracleSQL开发人员插入用户,我可以从java代码中获取该用户。但如果我试图插入一个用户,我会得到一个错误:不一致的数据类型:预期的数字是二进制的

部分用户.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>
    ...
部分插入器方法(所有参数均为字符串):

数据库中的用户表:

USERID NUMBER(9,0) - the primary key
USERNAME VARCHAR(200)
PASSWORD VARCHAR(200)
FIRST_NAME VARCAHR(200)
LAST_NAME VARCHAR(200)
DATE_OF_BIRTH TIMESTAMP
REGISTRATION_DATE TIMESTAMP

改为使用Long作为数据类型。这可能会有帮助

private Long userid;

我发现了真正的问题,因此我可以解决它

真正的问题:表中有时间戳字段,hibernate将它们生成为可序列化,这会产生错误,因为可序列化不是时间戳

修复:我已将映射规则添加到hibernate.reveng.xml:

<hibernate-reverse-engineering>
  <schema-selection match-schema="SYSTEM"/>
    <type-mapping> 
        <sql-type jdbc-type="OTHER" hibernate-type="java.util.Calendar" /> 
    </type-mapping>
    ...

...
它也适用于日期类型,而不仅仅是日历(可能还有更多我没有尝试过的类型)


结论:不应依赖自动生成机制。

我以前在意外尝试持久化某个实体时收到过此错误,该实体的某个字段具有空值。

当我们使用
@Column
注释声明对象类型属性时,可能会出现此问题

@Column(name="job_category")
private MiscTypeSetup jobCategory;
我们应该使用
@JoinColumn
注释进行声明

@ManyToOne
@JoinColumn(name="job_category")
private MiscTypeSetup jobCategory;

仍然不工作,我现在从user.getUserid()获取null;这意味着生成器class=“increment”不工作(可能是因为Users.hbm.xml中的userid类型为“int”,我尝试将其更改为其他类型,然后再次出现不一致的数据类型错误)。我不明白,我没有创建Users类,它是用hibernate自动生成的,所以我为什么需要在这个类中进行更改,它不应该使用数据库表的正确类型创建Users类?您可以接受自己的答案来获得信誉点。您希望在左上角边距的外侧使用“计数器”(当前为0)复选标记。祝你好运
@Column(name="job_category")
private MiscTypeSetup jobCategory;
@ManyToOne
@JoinColumn(name="job_category")
private MiscTypeSetup jobCategory;