请教:Hibernate5.0配置hbm访问Oracle数据库,sequence主键的配置问题
问题:程序运行时,hibernate自动创建的sequence不是在hbm主键配置中的名称,而是“hibernate_sequence”这个名称,怎样配置才能创建指定的sequence?
我的环境:hibernate5.0.6+oracle11g
hibernate.cfg.xml:
User.hbm.xml
User.java
JUnitTest.java
执行结果:
Hibernate:
create sequence hibernate_sequence start with 1 increment by 1
Hibernate:
create table tbuser (
id NUMBER not null,
lname varchar2(80 char),
pwd varchar2(80 char),
uname varchar2(80),
isdel number(10,0),
primary key (id)
)
Hibernate:
select
hibernate_sequence.nextval
from
dual
Hibernate:
insert
into
tbuser
(lname, pwd, uname, isdel, id)
values
(?, ?, ?, ?, ?)
User [id=1, lname=asdfasdf, pwd=fdasfdas, uname=null, isdel=0, count=0]
创建的sequence不是我指定的sequence名称,求解释和处理方法,谢谢
我的环境:hibernate5.0.6+oracle11g
hibernate.cfg.xml:
<!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">oracle.jdbc.driver.OracleDriver</property>
<property name="hibernate.connection.url">jdbc:oracle:thin:@localhost:1521:orcl</property>
<property name="hibernate.connection.username">ora</property>
<property name="hibernate.connection.password">ora</property>
<property name="hibernate.dialect">org.hibernate.dialect.Oracle10gDialect</property>
<property name="hibernate.hbm2ddl.auto">create</property>
<property name="hibernate.show_sql">true</property>
<property name="hibernate.format_sql">true</property>
<mapping resource="lenApp/pojo/sysMng/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
User.hbm.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 package="lenApp.pojo.sysMng">
<class name="User" table="tbuser">
<id name="id" type="integer">
<column name="id" not-null="true" sql-type="NUMBER" unique="true"></column>
<generator class="sequence" >
<param name="sequence">sq_tbuser_uid</param>
</generator>
</id>
<property name="lname" column="lname" type="java.lang.String" length="80"></property>
<property name="pwd" column="pwd" type="string" length="80"></property>
<property name="uname">
<column name="uname" sql-type="varchar2(80)"></column>
</property>
<property name="isdel" column="isdel" type="int"></property>
<property name="count" formula="(select count() from tbuser)"></property>
</class>
</hibernate-mapping>
User.java
package lenApp.pojo.sysMng;
public class User {
private Integer id;
private String lname;
private String pwd;
private String uname;
public int isdel;
public int count;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getLname() {
return lname;
}
public void setLname(String lname) {
this.lname = lname;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getUname() {
return uname;
}
public void setUname(String uname) {
this.uname = uname;
}
public int getIsdel() {
return isdel;
}
public void setIsdel(int isdel) {
this.isdel = isdel;
}
public int getCount() {
return count;
}
public void setCount(int count) {
this.count = count;
}
@Override
public String toString() {
return "User [id=" + id + ", lname=" + lname + ", pwd=" + pwd
+ ", uname=" + uname + ", isdel=" + isdel + ", count=" + count
+ "]";
}
}
JUnitTest.java
@Test
public void testAdd() {
User user=new User();
user.setLname("asdfasdf");
user.setPwd("fdasfdas");
tx=sess.beginTransaction();
sess.persist(user);
tx.commit();
System.out.println(user.toString());
}
执行结果:
Hibernate:
create sequence hibernate_sequence start with 1 increment by 1
Hibernate:
create table tbuser (
id NUMBER not null,
lname varchar2(80 char),
pwd varchar2(80 char),
uname varchar2(80),
isdel number(10,0),
primary key (id)
)
Hibernate:
select
hibernate_sequence.nextval
from
dual
Hibernate:
insert
into
tbuser
(lname, pwd, uname, isdel, id)
values
(?, ?, ?, ?, ?)
User [id=1, lname=asdfasdf, pwd=fdasfdas, uname=null, isdel=0, count=0]
创建的sequence不是我指定的sequence名称,求解释和处理方法,谢谢
...全文
相关推荐
Struts2.3.6+hibernate4.3.5+Spring 4.0.5+oracle 10g的集成
这个项目是关于将Struts2.3.6、Hibernate4.3.5、Spring 4.0.5框架与Oracle 10g数据库集成的一个实例。
Hibernate Oracle sequence的使用技巧
总之,理解并正确使用Hibernate与Oracle sequence的结合,可以帮助我们更高效地管理和维护数据库中的自增长主键,同时避免潜在的数据冲突问题。
hibernate映射主键生成策略native
)- [Oracle序列文档](https://docs.oracle.com/en/database/oracle/oracle-database/19/sqlrf/CREATE-SEQUENCE.html
hibernate。hbm.xml配置详解
- `identity`: 依赖数据库自身的主键生成机制(如 SQL Server 的 `IDENTITY`)。- `sequence`: 使用数据库 Sequence,如 Oracle。
hibernate.hbm.xml详解
- `identity`: 利用数据库的自动增长功能,如MySQL、DB2等。 - `sequence`: 利用数据库的Sequence,如Oracle。


Web 开发

