Hibernate对象映射文件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class catalog="spring_mvc" name="rcl.pojo.User" schema="dbo" table="user">
<id name="userId" type="java.lang.Integer">
<column name="userId"/>
<generator class="increment"/>
</id>
<property generated="never" lazy="false" name="name" type="java.lang.String">
<column name="Name" not-null="true"/>
</property>
<property generated="never" lazy="false" name="age" type="java.lang.Integer">
<column name="age"/>
</property>
<property generated="never" lazy="false" name="type" type="java.lang.String">
<column name="type"/>
</property>
</class>
</hibernate-mapping>

该配置文件在单hibernate存在的情况下执行sql语句是没有问题的,但是如果集成了spring,且使用了HibernateTempalete代替session执行curd操作,同样执行save方法,那么原session生成的语句是:

1
insert into user (Name, age, type, userId) values (?, ?, ?, ?)

而hibernateTempalate生成的语句却将会是:

1
insert into spring_mvc.dbo.user (Name, age, type, userId) values (?, ?, ?, ?)

而很显然,下面这个Sql是错误的,将不能正确执行,需要将dbo去掉。因此如果使用HibernateTempalete,就应该在上面的配置文件中去掉schema=”dbo”属性。