请教:Hibernate5.0配置hbm访问Oracle数据库,sequence主键的配置问题

lendylixt 2016-01-28 10:40:50
问题:程序运行时,hibernate自动创建的sequence不是在hbm主键配置中的名称,而是“hibernate_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名称,求解释和处理方法,谢谢
...全文
283 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
sd4796294 2018-02-19
  • 打赏
  • 举报
回复
引用 5 楼 mashiqiong 的回复:
<generator class="sequence" > <param name="sequence">sq_tbuser_uid</param> </generator> 改成 <generator class="sequence" > <param name="sequence_name">sq_tbuser_uid</param> </generator>
确实可以了 莫名其妙的变成了 sequence_name ?
mashiqiong 2017-03-06
  • 打赏
  • 举报
回复
<generator class="sequence" > <param name="sequence">sq_tbuser_uid</param> </generator> 改成 <generator class="sequence" > <param name="sequence_name">sq_tbuser_uid</param> </generator>
百里屠蘇 2017-02-22
  • 打赏
  • 举报
回复
楼主解决了吗,5.2同样不行,一样的代码4.3下可以运行。
lendylixt 2016-02-18
  • 打赏
  • 举报
回复
这是要沉啊,版主
lendylixt 2016-02-15
  • 打赏
  • 举报
回复
求各种大神显显神通
lendylixt 2016-01-29
  • 打赏
  • 举报
回复
没有人知道么?

81,090

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧