通过Hibernate注解Annotations进行对象映射,想在Oracle数据库中自动创建表,代码如下:

实体类:

import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
@Entity
public class Weapon {
private long id;
private String name;
@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE)
public long getId() {
 return id;}
public void setId(long id) {
 this.id = id;}
@Basic
public String getName() {
 return name;}
public void setName(String name) {
 this.name = name;}}

hibernate.cfg.xml中:

mapping class="demo.annotations.entity.Weapon"

测试类:

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import demo.annotations.entity.Weapon;

public class TestAnnotations {
 public static AnnotationConfiguration config2=new AnnotationConfiguration();
 public static SessionFactory sessionFactory;
 public static String config_file="/hibernate.cfg.xml";
 public static void main(String[] args) {
     config2.configure(config_file);
     sessionFactory=config2.buildSessionFactory();
     Session session=sessionFactory.openSession();
     Transaction tx=session.beginTransaction();
     Weapon weapon=new Weapon();
     weapon.setName("屠鹰刀");
     session.save(weapon);
     tx.commit();
     session.close();}}

运行的时候接连出现异常:首先抛出了无法找到执行类的定义的异常:

ava.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/

仔细检查后:发现少导入了一个hibernate-commons-annotations.jar的包,使用Hibernate注解需要三个jar包:ejb3-persistence.jar、hibernate-annotations.jar和hibernate-commons-annotations.jar包。

导入jar包后继续运行,又报了新的异常:

890 ERROR JDBCExceptionReporter:101 - ORA-02289: 序列不存在
Hibernate: select hibernate_sequence.nextval from dual
859  WARN JDBCExceptionReporter:100 - SQL Error: 2289, SQLState: 42000

于是开始思考数据库中的序列怎么与表进行关联的问题,审视异常信息后,我把数据库中的序列名称改为了hibernate_sequence,终于渡过这个异常。因为我在@GeneratedValue中设置的是通过sequence自动生成主键武器编号,所以必须要有相应的序列与Weapon表中的主键对应。

然而天公不作美,此时还是没有成功,报的是表或视图不存在的异常:

265 ERROR JDBCExceptionReporter:101 - ORA-00942: 表或视图不存在

265  WARN JDBCExceptionReporter:100 - SQL Error: 942, SQLState: 42000
     这个异常让我丈二和尚抓不着头脑了,注解不能自动地生成表吗?还是我的jar包有问题?我开始总纠结于自己的jar包,怎么调整都不起作用。于是又进行了各种胡乱的尝试,均不成功,开始有些崩溃了。经过屡番失败,在hibernate.cfg.xml中加入property name="hibernate.hbm2ddl.auto"  update  property,执行成功!

这句话的含义是:只是根据映射文件去和数据库中的表对应起来,如果不一致,就更新表的结构。在自动创建表的环节中需要。这样就正确的建立了Weapon表并且成功添加了一条数据。

使用Hibernate注解Annotations进行对象映射的异常处理的更多相关文章

  1. hibernate注解方式来处理映射关系

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...

  2. hibernate 注解 联合主键映射

    联合主键用Hibernate注解映射方式主要有三种: 第一.将联合主键的字段单独放在一个类中,该类需要实现java.io.Serializable接口并重写equals和hascode,再将 该类注解 ...

  3. Android 学习笔记之AndBase框架学习(五) 数据库ORM..注解,数据库对象映射...

    PS:好久没写博客了... 学习内容: 1.DAO介绍,通用DAO的简单调度过程.. 2.数据库映射关系... 3.使用泛型+反射+注解封装通用DAO.. 4.使用AndBase框架实现对DAO的调用 ...

  4. [Hibernate] 注解映射例子

    Hibernate 注解(Hibernate Annotation) 是一种比较新的方式,通过在 java 简单类增加注解,来声明 java 类和数据库表的映射,作用和 xml 文件相似.hibern ...

  5. hibernate annotation注解方式来处理映射关系

    在hibernate中,通常配置对象关系映射关系有两种,一种是基于xml的方式,另一种是基于annotation的注解方式,熟话说,萝卜青菜,可有所爱,每个人都有自己喜欢的配置方式,我在试了这两种方式 ...

  6. Hibernate注解方式一对多自关联关系映射

    MySQL版数据库表结构   DROP TABLE IF EXISTS SYS_DICT_ITEM; CREATE TABLE SYS_DICT_ITEM( ITEM_CODE ) NOT NULL, ...

  7. Hibernate基于注解方式的各种映射全面总结

    1. 使用Hibernate Annotation来做对象关系映射 1) 添加必须包: hibernate-jpa-2.0-api-1.0.0.Final.jar 2) 在实体类中添加JPA的标准注解 ...

  8. Hibernate注解----关联映射注解以及课程总结详解----图片版本

    上一篇,记录了Hibernate注解----类级别注解以及属性注解详解 ,我们这一节主要讲解的是Hibernate注解----关联映射注解以及课程总结详解. 本节的主要内容: 第3章 关联映射注解 3 ...

  9. Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长:

    Hibernate注解映射sequence时出现无序增长问题+hibernate 映射 oracle ID自动增长: 通过Hibernate注解的方式映射oracel数据库的sequence主键生成器 ...

随机推荐

  1. yum无法正常安装,提示如下 There are no enabled repos Run "yum repolist all"

    一般来说著名的linux系统基本上分两大类:1 RedHat系列:Redhat.Centos.Fedora等2 Debian系列:Debian.Ubuntu等RedHat 系列:1 常见的安装包格式 ...

  2. linux下查看memcache版本

    用telnet 127.0.0.1 11211命令连接上memcache, 然后直接输入stats就可以得到memcache服务器的版本

  3. [转]TypeScript Quick start

    本文转自:http://www.typescriptlang.org/docs/tutorial.html Quick start Get started with a simple TypeScri ...

  4. C#基础知识-使用XML完成一个小程序(十一)

    上一篇中讲到XML基本的结构,还有增删改查的方法,这一篇中我们就来利用XML来完成一个简单的订单系统,主要是实现一个简单学生名单的增删改查,如果想要应用到实际的环境中建议考虑数据量的问题,如果数据量大 ...

  5. ASP.NET MVC4 新手入门教程之四 ---4.添加一个模型

    在本节中,您将添加一些类,用于管理数据库中的电影.这些类将 ASP.NET MVC 应用程序的"模型"部分. 您将使用一种称为实体框架的.NET 框架数据接入技术来定义和使用这些模 ...

  6. C# 委托,事件, 异步

    委托 ​ 委托可以说是方法的集合,里面放着方法列表,当调用的时候就会调用全部的方法列表 ​ 个人理解 : 当声明和创建时委托时, 它是个 对象 当使用委托,调用方法时,它是个 方法 声明委托类型 de ...

  7. 解锁Spring框架姿势1

    Spring 介绍:Spring 框架是一个Java平台,它为开发Java应用程序提供全面的基础架构支持.Spring负责基础架构,因此您可以专注于应用程序的开发. Spring可以让您从" ...

  8. 执行shell脚本报错:syntax error near unexpected token `或syntax error: unexpected end of file

    引起此问题最可能的原因是: 在windows下编写的文件上传到linux执行. 我是在notepad++上编写的代码,之后上传到linux执行,报此错误.仔细检查,语法方面没有错误.上网查了一下,发现 ...

  9. MySQL聚合函数在计算时,不会自动匹配与之相对应的数据

    学习mysql过程中遇到了一个困惑,纠结了我半天时间,刚刚又重新复习了一下,终于知道问题所在 以下是一个需求: 取得平均薪水最高的部门的部门编号 代码如下: select deptno, avg(sa ...

  10. css text-shadow

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...