环境Hibernate3.3.2GA+Spring2.5.6+Struts2.1.6,数据库Oracle10g,服务器tomcat中TBL_FUNC表的正确映射应该如下:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd"
>
<!-- hibernate环境配置 -->
<hibernate-mapping package="pkg">
<class name="Func" table="TBL_FUNC">
<id name="funcId" column="FUNC_ID" type="java.lang.Integer" >
<generator class="native"></generator>
</id>
<!-- 基本字段 -->
<property name="funcName" column="FUNC_NAME" type="java.lang.String" length="128"/>
<property name="funcDesc" column="FUNC_DESC" type="java.lang.String" length="512"/>
<property name="ts" type="java.lang.String">
<column name="TS" sql-type="char" length="19" />
</property>
</class>
</hibernate-mapping>
其他TS字段对应Oracle10g数据库中的类型为CHAR(19)。
其中Hibernate的hibernate.hbm2ddl.auto设置为validate后,CHAR字段类型出现一些问题,现整理一下。
1、
<property name="ts" type="java.lang.String">
<column name="TS" sql-type="char" length="19" />
</property>
如果设置为
<property name="ts" column name="TS type="java.lang.String" length="19" />
在启动Tomcat时直接报错:
Wrong column type in TBL_FUNC for column TS. Found: char, expected: varchar2(19)
2、根据网上搜索的资料,建议将
<property name="ts" column name="TS type="java.lang.String" length="19" />修改为
<property name="ts" column name="TS type="java.lang.Character" length="19" />,启动成功后,显示字段的数据只显示一个字符。
最后在网上某论坛的回复中,搜索到上述设置。在此记录下来,以供分享。
分享到:
相关推荐
在 Hibernate 框架中,使用自定义类型映射 Oracle 中的 LONG 类型字段是一种常见的解决方案。通过实现 UserType 接口,我们可以定制 LONG 类型字段的读写操作。在本例中,我们定义了一个名为 CustomLong 的类,该类...
其次,可以在SQL查询中使用`CAST`函数将char字段转换为`VARCHAR2`类型;最后,也可以考虑直接修改数据库表结构,将char类型改为`VARCHAR2`类型。这些方法都可以有效地解决这个问题,开发者可以根据实际情况选择最...
然而,在与数据库交互时,这些数据类型需要与数据库中的相应字段类型进行映射。Hibernate,作为一款流行的Java持久化框架,提供了一种方便的方式来处理这种映射关系,使得我们可以轻松地在Java对象和数据库记录之间...
Oracle允许在WHERE子句中进行弱类型比较,如字符型字段与整型字段的直接比较,而DB2对此则更为严格,要求类型匹配。Oracle支持`REPLACE`函数,但在DB2中需要使用其他方法来实现相同功能。在子查询别名的使用上,...
例如,Oracle允许在WHERE子句中进行弱类型判断,如字符型字段与整型比较,但在DB2中这是不被允许的。此外,Oracle支持`REPLACE`关键字,但DB2不支持,这可能导致在编写SQL语句时遇到问题。 在子查询别名的使用上,...
关于数据类型的转换,例如在Oracle中,`boolean`类型的Java属性会被映射为`number`类型,而在MySQL中则为`char`类型,并且只接受'1'或'0'作为`true`或`false`的表示。因此,当插入`true`时,默认转换为'1',插入`...
在本部分,我们对比了三种数据库(MySQL、Oracle、SQL Server)在Hibernate配置文件中的设置差异。这对于跨数据库开发非常有用。 - **dialect**: 指定了Hibernate使用的方言,它告诉Hibernate如何处理特定数据库的...
- 在 ORM 框架如 Hibernate 中,DB2 的 DATE 字段需映射为 TIMESTAMP,否则会出现错误。 6. **分页处理**: - ORACLE 使用 ROWNUM 进行分页,如 `where rownum <= 10`。 - DB2 使用 ROW_NUMBER() OVER() 结合...
在 ORM 框架如 Hibernate 中,DB2 的 DATE 字段映射为 Java 的 `java.util.Date` 时,可能导致错误,需要改为 TIMESTAMP。 6. **分页处理**: - ORACLE 使用 `rownum` 进行分页,而 DB2 使用 `rownumber() over()`...
- 在DB2中,要实现类似的功能,你需要显式地将数字转换为字符串,如`WHERE '1' = CAST(1 AS CHAR)`。 2. **REPLACE关键字**: - Oracle支持`CREATE OR REPLACE`语句,允许更新已存在的对象。但在DB2中,你需要先`...
在Oracle中,由于没有原生的布尔类型,通常会使用`char(1)`、`varchar(1)`或`number(1)`来模拟,用0和1表示`false`和`true`。 理解这些映射关系有助于我们更好地设计实体类,以及正确地配置Hibernate的映射文件(如...
而在Hibernate框架中,这些关系同样可以通过XML配置文件或者注解的方式进行映射。 ##### 一对多映射关系示例 **User和Account之间的一对多映射关系** - **概念**: 在一对多的映射关系中,一个`User`可以拥有多个`...
### Oracle入门基础教程知识点概述 #### 一、数据库基础 - **定义与概念**:介绍数据库的基本定义,包括什么是数据库、数据库管理系统(DBMS)、数据模型等。 - **数据库分类**:按照不同的标准对数据库进行分类,...
多对多关系在Hibernate中通过关联映射实现,通常需要一个关联表(C表)。HQL(Hibernate Query Language)可以用来处理这种关系,插入数据时同时维护关联关系。 【Oracle函数】 Nvl()用于处理NULL值,当给定的字段...
在Oracle中创建存储过程,需要使用`CREATE OR REPLACE PROCEDURE`语句,定义过程体,包括变量声明、异常处理和执行语句。 #### Java基础知识面试题解析 **1. 实现序列化的方法?** 序列化是将对象转换为字节流的...
在Java编程中,自定义注解(Annotation)是一种强大的元数据机制,允许程序员在源代码中插入信息,这些信息可以被编译器、IDE或运行时环境用来进行各种处理。自定义注解使得代码更加可读,易于维护,并且可以自动化...