hibernate操作oracle数据库 主键自增

相信使用过mysql,sql server,oracle的朋友都知道,oracle中的表的主键如果想设置成自增长,那么需要创建序列

在oracle中为


create table Student(
 Student_ID  number(6) NOT NULL PRIMARY KEY,
 Student_Name varchar2(10) NOT NULL,
 Student_Age number(2) NOT NULL
);
 
CREATE SEQUENCE student_sequence 
INCREMENT BY 1
NOMAXVALUE
NOCYCLE
CACHE 10;
 
insert into Student values(student_sequence.nextval,'aa',20);
此时数据库中会保存会插入一条数据id为(2,aa,20)的数据
有了这些知识再加上hibernate对数据库的操作,我们就可以开始写代码了

无注解版的student JavaBean类为


package com.bean;
 
public class Student
{
    private int student_id;
    private String student_name;
    private int student_age;
   
    public int getStudent_id()
    {
        return student_id;
    }
    public String getStudent_name()
    {
        return student_name;
    }
    public int getStudent_age()
    {
        return student_age;
    }
    public void setStudent_id(int id)
    {
        this.student_id = id;
    }
    public void setStudent_name(String name)
    {
        this.student_name = name;
    }
    public void setStudent_age(int age)
    {
        this.student_age = age;
    }
}
对应的student.hbm.xml文件核心代码

<class name="Student" table="Student">         
        <id name="student_id" column="student_id" type="java.lang.Integer">             
            <generator class="native">         
                <param name="sequence">student_sequence</param>
            </generator>
        </id>         
        <property name="student_name" column="Student_Name" type="java.lang.String"/>
        <property name="student_age" column="Student_Age" type="java.lang.Integer"/>
    </class>
注解版实体类代码

package com.bean;
 
import javax.persistence.*;
 
@Entity
@Table(name="student")
public class StudentAnnotation {
    private int student_id;
    private String student_name;
    private int student_age;
   
    @Id
    @SequenceGenerator(name="generator",sequenceName="student_sequence")
    @GeneratedValue(strategy=GenerationType.SEQUENCE,generator="generator")
    /*@Id
    @GenericGenerator(name = "idGenerator", strategy = "native")
    @GeneratedValue(generator = "idGenerator")  有网友说这种方式也可以,但是实际上错误*/
    public int getStudent_id()
    {
        return student_id;
    }
    
    @Column
    public String getStudent_name()
    {
        return student_name;
    }
    
    @Column
    public int getStudent_age()
    {
        return student_age;
    }
    public void setStudent_id(int id)
    {
        this.student_id = id;
    }
    public void setStudent_name(String name)
    {
        this.student_name = name;
    }
    public void setStudent_age(int age)
    {
        this.student_age = age;
    }
}
当然,配置文件hibernate.cfg.xml代码如下,oracle数据库为11g

<hibernate-configuration>
<session-factory>		
	<property name="connection.driver_class">oracle.jdbc.driver.OracleDriver</property><!--数据库连接url-->
	<property name="connection.url">jdbc:oracle:thin:@127.0.0.1:orcl</property>
    	<property name="connection.username">go</property>
    	<property name="connection.password">go</property>
    	<property name="dialect">org.hibernate.dialect.Oracle10gDialect</property>
    	<!-- <mapping resource="com/bean/Student.hbm.xml"/> -->	<!-- 使用*.hbm.xml请保留该行,否则注释 -->
    	<mapping class="com.bean.StudentAnnotation" /> <!-- 使用注解方式请保留该行,否则注释 -->
</session-factory>
</hibernate-configuration>
最后就测试类了

package com.test;
 
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;
//import com.bean.Student;   //无注解
import com.bean.StudentAnnotation;   //有注解
 
public class Test {
	public static void main(String[] args) {
		try {
			SessionFactory sf = new Configuration().configure().buildSessionFactory();
			Session session = sf.openSession();        
			Transaction tx = session.beginTransaction();  
 
			StudentAnnotation stu = new StudentAnnotation();    //有注解
			//Student stu = new Student();    //无注解
 
			stu.setStudent_name("zhangsan");
			stu.setStudent_age(18);     
			session.save(stu);
			tx.commit();		
			session.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
测试后,数据库中应该会有zhagnsan的学生信息
测试的数据库驱动为ojdbc-14的版本,测试的时候,会出现一条INFO信息,

INFO: HHH000424: Disabling contextual LOB creation as createClob() method threw error : java.lang.reflect.InvocationTargetException

忽略即可,网上说改为ojdbc-6的版本就没问题了,正解,但是数据库中数据为

https://blog.csdn.net/thepeakofmountain/article/details/17173715

猜你喜欢

转载自blog.csdn.net/qq_39879632/article/details/82314165