目录:
1、确定已在oracle数据库中建表
1.1、查询表1.2、删除表中已有记录
1.3、确定已有sequence
2、创建java project工程创建class Student
2.1 添加jar包:ojdbc6.jar,以及...\hibernate-release-5.1.0.Final\lib\required下的所有jar包
3、创建hibernate.cfg.xml4、创建POJO对应的映射文件*.hbm.xml
5、创建Configuration对象,读取hibernate.cfg.xml
详细如下:
1、确定已在oracle数据库中建表
1.1、查询表
SQL*Plus: Release 11.2.0.2.0 Production on 星期四 3月 24 09:41:08 2016
Copyright (c) 1982, 2014, Oracle. All rights reserved.
SQL> conn zhaod
输入口令:
已连接。
SQL> desc student;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER(10)
NAME NOT NULL VARCHAR2(20)
ADDRESS VARCHAR2(20)
GENDER VARCHAR2(20)
AGE NUMBER(3)
SQL> delete from student;
已删除0行。
SQL> commit;
提交完成。
SQL>
1.3、确定已有sequence
SQL> col sequence_name format a20;
SQL> select sequence_name,min_value,max_value from all_sequences;
SEQUENCE_NAME MIN_VALUE MAX_VALUE
-------------------- ---------- ----------
SCHEDULER$_JOBSUFFIX 1 1.0000E+28
_S
DM$EXPIMP_ID_SEQ 1 1.0000E+28
HS_BULK_SEQ 1 1.0000E+28
XDB$NAMESUFF_SEQ 1 99999
SDO_IDX_TAB_SEQUENCE 1 1.0000E+27
TMP_COORD_OPS 1000000 2000000
SAMPLE_SEQ 1 1.0000E+28
WWV_FLOW_SESSION_SEQ 1 1.0000E+28
WWV_SEQ 1 1.0000E+28
SEQUENCE_NAME MIN_VALUE MAX_VALUE
package com.iotek.basic.pojo;
import java.io.Serializable;
public class Student implements Serializable {
private Long id;
private String name;
private String address;
private String gender;
private Integer age;
public Student() {
super();
}
public Student(Long id, String name, String address, String gender, Integer age) {
super();
this.id = id;
this.name = name;
this.address = address;
this.gender = gender;
this.age = age;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
}
oracle.jdbc.driver.OracleDriver
jdbc:oracle:thin:@localhost:1521:XE
zhaod
zhaodeng
org.hibernate.dialect.Oracle10gDialect
true
这里应注意加上一行
否则会出现Unknown entity 错误(汗)
org.h2.Driver
jdbc:h2:target/db/hibernate-spatial;mode=PostgreSQL;DB_CLOSE_DELAY=-1
sa
1
org.hibernate.dialect.H2Dialect
thread
org.hibernate.cache.NoCacheProvider
true
update
filesystem
target/indexes
Student.hbm.xml
student_seq
后问题就出在这里(问题为:ORA-02289: 序列不存在),应改为:
student_seq
注:表示一个主键的生成机制。即具体通过何种方式来生成。 生成方式包括: increment:生成long, short或者int类型的主键,不能在cluster环境下使用。适用于所有数据库 identity:生成long, short或者int类型的主键。适用于DB2, MySQL, MS SQL Server, Sybase and HypersonicSQL sequence :生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase. hilo:生成long, short或者int类型的主键。需要提供一个数据库的表来存放生成的主键信息。当采用应用服务器的JTA提供的数据库连接或者用户自定义的数据库连接的时候,不要使用这种主键生成方式。适用于所有数据库 seqhilo:采用给定的数据库的sequence来生成long, short或者int类型的主键。适用于DB2, PostgreSQL, Oracle, SAP DB, McKoi,Interbase. uuid.hex:采用128位的算法来生成一个32位字符串。最通用的一种方式。适用于所有数据库 uuid.string:同样采用128位的UUID算法。将生成的字符编码位16位。适用于除PostgreSQL.以外的数据库 native:根据具体连接的数据库从identity, sequence或者hilo选择一种来生成主键。适用的数据库根据选择的生成方式确定。 assigned: 交给应用自己给主键赋值。要注意的是赋值必须在调用save()方法之前完成。适用的数据库根据选择的生成方式确定。
5、创建Configuration对象,读取hibernate.cfg.xml
package com.iotek.basic;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.Transaction;
import com.iotek.basic.pojo.Student;
public class StudentTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
Student stu = new Student();
stu.setName("zhaox");
stu.setAddress("beijing");
stu.setGender("female");
stu.setAge(18);
// 创建Configuration,读取hibernate.cfg.xml
Configuration config = new Configuration();
config.configure("hibernate.cfg.xml");
// 创建SessionFactory
SessionFactory factory = config.buildSessionFactory();
// 创建Session,获取数据库连接
Session session = factory.openSession();
// 通过session完成数据库的CRUD()
Transaction trans = null;
try {
// 启动事务
trans = session.beginTransaction();
// 保存学生对象
session.save(stu);
// 提交事务
trans.commit();
} catch (Exception e) {
e.printStackTrace();
// 回滚事务
trans.rollback();
} finally {
// 关闭session,即为关闭connection
session.close();
}
}
}
SQL> col sequence_name format a20;
SQL> select * from student;
ID NAME
---------- ----------------------------------------
ADDRESS
----------------------------------------
GENDER AGE
---------------------------------------- ----------
1 zhaox
beijing
female 18
SQL>