关于hibernate的hibernate_sequence.nextval
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关于hibernate的hibernate_sequence.nextval相关的知识,希望对你有一定的参考价值。
要注意的是,我是通过注解来映射数据库的。以下是源代码:
实体类:
import javax.persistence.Basic;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name="KK")
public class KK
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;
测试类:
public class TestOfKK
public static AnnotationConfiguration config = new AnnotationConfiguration();
public static SessionFactory sessionfactory;
public static String config_file="/hibernate.cfg.xml";
public static void main(String[] args)
//获得配置文件信息
config.configure(config_file);
//创建session工厂
sessionfactory=config.buildSessionFactory();
Session session=sessionfactory.openSession();
//开启一个事务
Transaction tx=session.beginTransaction();
KK k=new KK();
// k.setName("张三");
k.setName("李四");
session.save(k);
tx.commit();
在配置文件hibernate.cfg.xml中配置了 <mapping class="com.annotation.KK"/>
这时候执行测试类可以在数据库中生成一张新的表,但是序列器却有问题 。也就是说我第一次执行测试类,k.setName("张三");数据库生成了id=10,name=张三的表,第二次执行我注释掉k.setName("张三");而执行k.setName("李四"),其他不变,那数据库表应当有两行记录,但结果是只有最新的李四记录,并且控制台打印了“hibernate_sequence.nextval”,序列器是怎么绑定的?不是通过注解直接生成的么?谢谢
@Entity
@Table(name="KK")
@SequenceGenerator(name="",sequenceName="",allocationSize=1,initialValue=1)
public class KK
private Long id ;
private String name;
......
参考技术A 首先:你是用的oracle
你的sequence 配置有问题,正确如下:
@Id
@GeneratedValue(strategy = enerationType.SEQUENCE,generator="payablemoney_seq")
@SequenceGenerator(name="payablemoney_seq", sequenceName="seq_payment")
你应该注意到的是 指定的sequence,
当你第一次生成后,第二次是如何找到seq 再次插入的?本回答被提问者采纳 参考技术B 标题和内容是两个问题,你想问哪一个?
参考技术C 怎么感觉像是在 JBoss 里追问
没用过JBoss- -
关于Hibernate的一个简单小程序
本人根据视频学习了一下三大框架中比较简单的一个Hibernate,并简单完成了一个运用Hibernate的小程序
Hibernate是一个简化web程序Dao层的一个框架,应用他,可以完全脱离sql语句
第一步:创建一个java项目,没有必要创建一个web项目,因为Hibernate本身是针对后台对数据库的操作的
第二步:导入jar包:可以在根目录下创建一个lib文件夹用来存放导入的jar包,当然要先下载Hibernate的资源包并解压,打开之后首先将根目录的两个jar包导入,截图如下
然后打开lib文件夹将required文件夹里的jar包全部导入,再将jpa文件夹的jar包导入,最后导入mysql的连接的jar包,至此,需要的jar包全部导入完毕,最后右击创建的lib文件夹,进行一下build path
第三步:
创建一个实体类,为了简单,只创建一个user类,包含三个属性,id,username,pasword,并分别写出get和set函数,并在后台数据库中创建出相应的表
第四部:配置链接数据库的xml文件,该xml的全称是hibernate.cfg.xml
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd"> <hibernate-configuration> <session-factory > <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property> <property name="hibernate.connection.username">root</property> <property name="hibernate.connection.password">root</property> <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/EE19Day01</property> <!-- 操作数据库时,会向控制台打印sql语句 --> <property name="show_sql">true</property> <!-- 在打印sql语句之前,首先对其进行转化,转化成程序员可以看懂的sql语句 --> <property name="format_sql">true</property> <!--是否自动生成表结构 --> <property name="hbm2ddl.auto">update</property> <!-- 事务自动提交 --> <property name="hibernate.connection.autocommit">true</property> <mapping resource="User.hbm.xml"/> </session-factory> </hibernate-configuration>
第五步:配置Hibernate的orm映射关系,代码如下:全称是User.hbm.xml(最好xml的名称与类的名称保持一致,以便后边的简单操作)
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd"> <hibernate-mapping> <class name="cn.heima_hello.User" table="t_user"> <id name="id" column="id"> <generator class="native"> </generator> </id> <property name="username" column="username"></property> <property name="password" column="password"></property> </class> </hibernate-mapping>
第六步:创建一个测试类,对数据库进行操作
package cn.heima_hello; import org.hibernate.Session; import org.hibernate.SessionFactory; import org.hibernate.cfg.Configuration; public class test01 { public void fun1() { //1.读取配置文件 Configuration conf = new Configuration().configure(); //2.根据数据创建factory对象 SessionFactory sessionFactory = conf.buildSessionFactory(); //3.获取操作数据库的session对象 Session session = sessionFactory.openSession(); //4.操作数据库 User user = new User(); user.setUsername("Tom"); user.setPassword("1234"); session.save(user); //5.关闭资源 session.close(); sessionFactory.close(); } public static void main(String[] args) { // TODO Auto-generated method stub test01 test01 = new test01(); test01.fun1(); } }
至此,一个简单的Hibernate程序已经搭建好,如果有什么问题,给以评论私聊
以上是关于关于hibernate的hibernate_sequence.nextval的主要内容,如果未能解决你的问题,请参考以下文章
关于hibernate的saveOrUpdate方法的一个问题
Hibernate **关于hibernate4.3版本之后org.hibernate.service.ServiceRegistryBuilder被弃用**
在hibernate5中,关于让hibernate自动创建表报错的问题。