`
nbkangta
  • 浏览: 430559 次
  • 性别: Icon_minigender_1
  • 来自: 宁波
社区版块
存档分类
最新评论

在hibernate注解的ColumnDefination中慎用default value

阅读更多

 

这一段时间,公司项目计划是旧数据的迁移,从MYSQL迁移至ORACLE,开了无数次会,讨论了若干次。
  错误现象:
  在从MYSQL导出sql脚本后,在oracle相关工具里执行创建表的sql时,如下,有所删改:
   CREATE TABLE TEST_TBL (
   id NUMBER (6) NOT NULL ,
   name varchar2(16) NOT NULL default '',
   tel varchar2(16) NOT NULL default '',
   CONSTRAINT PK_ID
   PRIMARY KEY ( id )) ;
  报错:
  The following error has occurred:
  ORA-00907: missing right parenthesis
  开始觉得莫明奇妙,已经将相关数据类型改了,还报这个错,很郁闷,浪费了足足有30分钟,搞这事,搞定后,遂想写下此文。
  MYSQL ver :4.0.17,ORACLE:9i,这个问题与版本关系不大,只是从严谨角度出发,还是提供一下版本.
  错误原因在于:
  字段定义: name varchar2(16) NOT NULL default ''
  oracle的create table语法:
  CREATE [ [ LOCAL ] { TEMPORARY | TEMP } ] TABLE table_name (
   { column_name data_type [ DEFAULT default_expr ] [ column_constraint [, ... ] ]
   | table_constraint } [, ... ]
  ).....
  意味着,字段给定默认值,default value 应该在[ column_constraint [, ... ] 之前,name字段定义应该是:name varchar2(16) default '' NOT NULL
  再看MYSQL create table的语法:
  CREATE [TEMPORARY] TABLE [IF NOT EXISTS] tbl_name [(create_definition,...)]
  
  create_definition:
   col_name type [NOT NULL | NULL] [DEFAULT default_value] [AUTO_INCREMENT]
   MYSQL中的语法定义是,default_value 写在"NOT NULL/NULL"之后,当然实际上在MYSQL里创建表时,default_value的值也可以在"NOT NULL/NULL"之前,之前之后都是无关的,都可以正确创建表,但在ORACLE中是严格按照语句定义来检验的,所以同样的语句(改相关字段类型后) 在oracle中报错!
  另外还有一点,无论是用mysqldump命令,还是用PHP提供的一个工具(选择导出为ORACLE格式),他们导 出的表的定义SQL中,default value的位置都是在"NOT NULL/NULL"之后,而这是ORACLE相关语法不支持的,所以出现如上错误。
  写出来,以防各位在这个小问题上浪费时间.
  还有个感觉就是看问题我们不能只看表象,表里未必如一,工作如此,生活亦如此

分享到:
评论

相关推荐

    Hibernate 注解说明文档

    2. **@DiscriminatorColumn**和**@DiscriminatorValue**: 在单表继承策略中,用于添加鉴别列和值。 3. **@Embeddable**和**@Embedded**: 支持复杂类型嵌入,将多个属性打包成一个复合类型。 六、懒加载和级联操作 ...

    hibernate注解所需包

    使用hibernate注解,必须要使用库hibernate-commons-annotations,hibernate-core,hibernate-jpa,ejb3-persistence,javassist等

    Hibernate注解jar包

    在Hibernate中,注解用于定义实体类、属性、关系等,替代了传统的Hibernate XML配置文件。 2. **Hibernate核心注解**: - `@Entity`:标记一个类为Hibernate的持久化实体类,对应数据库中的一个表。 - `@Table`:...

    Hibernate注解API.pdf

    在 Hibernate 中,可以通过使用注解来映射对象与数据库表之间的关系,从而实现 ORM(对象关系映射)。这种方式避免了大量的 XML 配置工作,使得开发更为简洁高效。 #### 二、版本说明 根据提供的部分内容,文档...

    springmvc+hibernate注解框架整合 demo

    在这个"springmvc+hibernate注解框架整合 demo"项目中,你可以看到所有这些概念的实际应用,包括如何配置和使用注解来实现Spring MVC和Hibernate的整合。这个示例对于初学者来说是一个很好的起点,可以帮助他们理解...

    ssh框架构建 hibernate注解 spring注解

    在这个例子中,`@Entity`注解表示User是一个数据库实体,`@Table`定义了对应的表名,`@Id`注解指定了主键字段,`@GeneratedValue`用于自动生成主键值。 通过SSH框架结合注解的方式,开发者可以显著减少XML配置文件...

    Hibernate注解用法总结

    在Java的ORM框架Hibernate中,注解是一种强大的工具,它允许开发者无需XML配置就能实现对象关系映射。本文主要总结了Hibernate中常见的注解用法,涵盖了类级别和属性级别的注解,以及与主键和非主键相关的注解。 1....

    hibernate注解所需jar包

    在使用过程中,你可以利用Hibernate的配置文件(如hibernate.cfg.xml)或编程式配置来指定数据源、实体扫描路径等信息,并结合注解来完成数据库模型的定义。 总之,Hibernate的注解功能极大地简化了Java应用中的...

    Hibernate注解、注释大全

    在Hibernate中,注解是用于描述Java类及其属性如何映射到数据库表的重要工具。本文将全面解析Hibernate中的核心注解,帮助初学者理解和掌握其用法。 1. `@Entity`:此注解标记一个类作为Hibernate管理的实体Bean。...

    Hibernate 注解映射

    * mappedBy 属性:用在双向关联中,把关系的维护权反转。 * cascade 属性:指定级联操作的行为,可以选择 CascadeType.PERSIST、MERGE、REMOVE、REFRESH 和 ALL。 * 在双向关联中,需要通过调用双方的 set 方法来...

    Spring+Hibernate注解事务实例

    - 在DAO层,使用Hibernate的Session和Query对象进行数据库操作,Spring会在事务的上下文中管理这些操作。 4. **测试**: - 编写测试用例,模拟正常情况和异常情况,确保事务管理能够正确地进行提交和回滚。 这个...

    spring-hibernate注解配置源码

    在IT行业中,Spring和Hibernate是两个非常重要的框架,它们分别用于处理Java应用的依赖注入和服务层与数据层的管理。本实例"spring-hibernate注解配置源码"旨在展示如何在不使用XML配置的情况下,通过注解的方式整合...

    hibernate注解

    在本文中,我们将深入探讨Hibernate注解的几个核心方面:级联关系、增删改查操作、二级缓存、日志配置以及注解解析。 1. **级联关系**: Hibernate中的级联关系允许我们在一个实体的操作中自动处理与其关联的其他...

    hibernate注解详解说明

    在 Hibernate 中,注解是一种简洁且强大的工具,用于替代传统的 XML 配置文件来描述对象模型和数据库之间的映射关系。这篇文档将深入探讨 Hibernate 注解的使用。 ### 第 1 章 创建一个注解项目 在开始使用 ...

    Hibernate注解 关联关系映射注解.docx

    在Java的持久化框架Hibernate中,注解是用于简化对象关系映射(ORM)的一种方式。本篇文章将详细探讨在Hibernate中如何使用注解来处理各种关联关系,特别是`mappedBy`属性的用法。 首先,`@OneToMany`注解用于表示...

    Hibernate注解详解

    每个持久化POJO类都是一个实体Bean, 通过在类的定义中使用 @Entity 注解来进行声明。 声明实体Bean @Entity
public class Flight implements Serializable {
 Long id;
 @Id
 public Long getId() { return id;...

    hibernate注解详解

    在Hibernate中,注解是用于替代传统的XML配置文件,以元数据的形式标注在类、属性或者方法上,实现对象与数据库表之间的映射。本文将深入探讨Hibernate中的注解,帮助你更好地理解和应用它们。 1. **实体注解(@...

    Hibernate 注解一对多,多对一

    在Java的持久化框架Hibernate中,注解是用于对象关系映射(ORM)的重要手段,它们简化了数据库交互,使得开发者无需编写大量的SQL代码。"Hibernate注解一对多,多对一"是两个常见的关系映射类型,适用于处理实体类...

    hibernate 注解 annotation 教程

    hibernate 注解 annotation 教程

    hibernate注解.rar

    本文将深入探讨Hibernate注解的相关知识,包括基本概念、常用注解以及它们在实际开发中的应用。 一、Hibernate注解基础 1.1 Hibernate注解简介 Hibernate注解是将ORM元数据嵌入到Java类和属性的声明中,以声明式的...

Global site tag (gtag.js) - Google Analytics