前段时间碰到了这类错误,最后的问号表示不确定的数字,但是解决的方法都一样。
首先,自定义一个方言类——Hibernate Dialect,该类需要继承与我们使用的数据库相应的方言类。比如:如果我们用的是MySql(版本为5.x.x),我们需要继承“org.hibernate.dialect.MySQL5Dialect”;如果我们使用的是DB2,那么我们应该继承“org.hibernate.dialect.DB2Dialect”;我用的是SqlServer2008,所以我要继承“org.hibernate.dialect.SQLServerDialect”,参考代码如下:
- import java.sql.Types;
- import org.hibernate.Hibernate;
- import org.hibernate.dialect.SQLServerDialect;
- public class SqlServer2008Dialect extends SQLServerDialect {
- public SqlServer2008Dialect() {
- super();
- registerHibernateType(Types.CHAR, Hibernate.STRING.getName());
- registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());
- registerHibernateType(Types.LONGNVARCHAR, Hibernate.STRING.getName());
- registerHibernateType(Types.DECIMAL, Hibernate.DOUBLE.getName());
- }
- }
- import java.sql.Types;
- import org.hibernate.Hibernate;
- import org.hibernate.dialect.SQLServerDialect;
- public class SqlServer2008Dialect extends SQLServerDialect {
- public SqlServer2008Dialect() {
- super();
- registerHibernateType(Types.CHAR, Hibernate.STRING.getName());
- registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName());
- registerHibernateType(Types.LONGNVARCHAR, Hibernate.STRING.getName());
- registerHibernateType(Types.DECIMAL, Hibernate.DOUBLE.getName());
- }
- }
import java.sql.Types; import org.hibernate.Hibernate; import org.hibernate.dialect.SQLServerDialect; public class SqlServer2008Dialect extends SQLServerDialect { public SqlServer2008Dialect() { super(); registerHibernateType(Types.CHAR, Hibernate.STRING.getName()); registerHibernateType(Types.NVARCHAR, Hibernate.STRING.getName()); registerHibernateType(Types.LONGNVARCHAR, Hibernate.STRING.getName()); registerHibernateType(Types.DECIMAL, Hibernate.DOUBLE.getName()); } }
总之大家可以在“org.hibernate.dialect”这个package中找到与数据库相对应的方言类。在其中,我们需要注意三点点:
a、在默认构造方法中继承父类构造方法,同时调用“registerHibernateType(int code, String name)”方法将数据库中该数据类型映射到相应的java类型。code表示数据库中的数据类型整数表示,可以在“java.sql.Types”类中查到相应的数据库类型。name表示我们要映射的java类型。可以从“org.hibernate.Hibernate”中查到。
b、Types类。在Types中定义了数据库常用的字段类型,如:
- ……
- public final static int LONGVARCHAR = -1;
- public final static int TIMESTAMP = 93;
- ……
- ……
- public final static int LONGVARCHAR = -1;
- public final static int TIMESTAMP = 93;
- ……
…… public final static int LONGVARCHAR = -1; public final static int TIMESTAMP = 93; ……
我们可以根据“No Dialect mapping for JDBC type : ”后面紧跟的数字在该类(Types)中找到相应的类型。我们也可以根据数据表中字段的类型找到相应的值。这个值就是registerHibernateType(int code, String name)的第一个参数。
c、Hibernate类。Hibernate中定义了转换的目的类型,如第一段代码所示。能够转化成什么类型,可以在该类中查找。通过调用“getName()”方法得到一个String型。当然,如果你记住了,我们还可以这样写
- import org.hibernate.dialect.SQLServerDialect;
- public class SqlServer2008Dialect extends SQLServerDialect {
- public SqlServer2008Dialect() {
- super();
- registerHibernateType(1, "string");
- registerHibernateType(-9, "string");
- registerHibernateType(-16, "string");
- registerHibernateType(3, "double");
- }
- }
- import org.hibernate.dialect.SQLServerDialect;
- public class SqlServer2008Dialect extends SQLServerDialect {
- public SqlServer2008Dialect() {
- super();
- registerHibernateType(1, "string");
- registerHibernateType(-9, "string");
- registerHibernateType(-16, "string");
- registerHibernateType(3, "double");
- }
- }
import org.hibernate.dialect.SQLServerDialect; public class SqlServer2008Dialect extends SQLServerDialect { public SqlServer2008Dialect() { super(); registerHibernateType(1, "string"); registerHibernateType(-9, "string"); registerHibernateType(-16, "string"); registerHibernateType(3, "double"); } }
其实和上面是一样的,只是把上面所代表的值直接写出来了。O(∩_∩)O哈哈~。需要注意的是super()方法的调用,不调用该方法是否会出现错误,我这就不知道了,这个我没有做过测试,所以最好调一下。
然后,我们还需要在配置文件中作修改。我用的是EJB3,所以我在META-INF文件夹下的persistent.xml文件中添加属性“hibernate.dialect”,value值为“xxx.xxx.SqlServer2008Dialect ”,xxx表示包名,这个大家都知道。代码如下:
- <?xml version="1.0" encoding="UTF-8" ?>
- <persistence xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
- http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
- version="1.0">
- <persistence-unit name="DateSource">
- <jta-data-source>java:/SqlServerDS</jta-data-source>
- <properties>
- <property name="hibernate.dialect" value="xxx.xxx.SqlServer2008Dialect"/>
- <property name="hibernate.hbm2ddl.auto" value="none" />
- </properties>
- </persistence-unit>
- </persistence>
- <?xml version="1.0" encoding="UTF-8" ?>
- <persistence xmlns="http://java.sun.com/xml/ns/persistence"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
- http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
- version="1.0">
- <persistence-unit name="DateSource">
- <jta-data-source>java:/SqlServerDS</jta-data-source>
- <properties>
- <property name="hibernate.dialect" value="xxx.xxx.SqlServer2008Dialect"/>
- <property name="hibernate.hbm2ddl.auto" value="none" />
- </properties>
- </persistence-unit>
- </persistence>
<?xml version="1.0" encoding="UTF-8" ?> <persistence xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd" version="1.0"> <persistence-unit name="DateSource"> <jta-data-source>java:/SqlServerDS</jta-data-source> <properties> <property name="hibernate.dialect" value="xxx.xxx.SqlServer2008Dialect"/> <property name="hibernate.hbm2ddl.auto" value="none" /> </properties> </persistence-unit> </persistence>
打包部署,OK!当然,如果你使用的是Hibernate,则修改Hibernate配置文件hibernate.cfg.xml,将“hibernate.dialect”属性的值改为自己的方言类“xxx.xxx.SqlServer2008Dialect ”即可。
相关推荐
- `<type-mapping>`: 表示数据源元数据中的类型映射方式,在本例中使用`Oracle10g`来指定针对Oracle 10g数据库的特定配置。 #### 三、EJB 3.0配置 接下来,我们来看一下如何利用EJB 3.0技术进行持久化层的配置。 ...
Hibernate is an Object-Relational Mapping (ORM) solution for Java applications that provides a powerful framework for mapping object-oriented domain models to traditional relational databases....
- `connection.url`:指定数据源或JNDI名称。 - `connection.provider_class`:数据库连接提供者类,这里使用的是`DatasourceConnectionProvider`,表明通过数据源获取连接。 - `dialect`:指定数据库方言,这里...
- **`dialect`**:配置特定数据库的方言,如`org.hibernate.dialect.MySQLDialect`。不同的数据库可能有不同的SQL语法,通过指定正确的方言可以让Hibernate生成适合当前数据库的SQL语句。 - **`hbm2ddl.auto`**:...
<property name="jndi.class">weblogic.jndi.WLInitialContextFactory <property name="connection.username">web <property name="connection.password">11111111 <property name="dialect">org.hibernate....
-- 指定数据源为JNDI名称 --> <property name="connection.datasource">java:comp/env/jdbc/schoolprojectDS</property> <!-- 是否将运行期生成的 SQL 输出到日志以供调试--> <property name="show_sql">true...
-- <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/store" />--> <!--Hibernate配置--> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"><!...
<property name="dialect">org.hibernate.dialect.MySQLDialect ``` - **外连接查询** - 控制是否启用外连接查询。 - **二进制流** - 处理 BLOB 类型数据。 - **二级缓存和查询缓存** - 配置缓存策略提高...
根据给定的文件信息,我们可以总结出以下几个...<ResourceLink name="jdbc/mydatasource" global="jdbc/mydatasource" type="javax.sql.DataSource"/> ``` **Step 3:** 在Spring的配置文件中引用JNDI名称: ```xml ...
<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect <prop key="hibernate.show_sql">true ``` 这里,`dataSource`引用了之前配置的Proxool数据源,`sessionFactory`配置了实体包扫描...
- 使用命令行工具:`java -jar hibernate-tools-X.Y.Z.jar hbm2ddl -db hsqldb -dialect org.hibernate.dialect.HSQLDialect -input hibernate-mapping.hbm.xml` - 通过编程方式调用。 #### 四、事务和并发控制 ...
- **Web应用环境**:将jar文件放置在WEB-INF/lib目录下,并可以通过JNDI获取JDBC资源。 #### 四、快速入门实例 1. **创建数据库表**:使用SQL语句创建一个简单的USER表,包含用户ID、姓名、性别和年龄等字段。 ``...
数据源可以是JDBC直接配置,也可以通过JNDI(Java Naming and Directory Interface)来查找。对于JDBC配置,包括了数据库驱动、URL、用户名和密码等属性。例如: ```xml <property name="connection.driver_class">...
<property name="dialect">org.hibernate.dialect.MySQLDialect <!-- 映射资源 --> <mapping resource="com/wqbi/model/pojo/student.hbm.xml" /> </session-factory> </hibernate-configuration> ``` 这段...
在Hibernate.cfg.xml中,数据源的配置分为两种方式:JDBC直连和JNDI查找。JDBC直连是直接在配置文件中提供数据库连接的相关信息,如数据库驱动、URL、用户名和密码。而JNDI查找则是通过Java Naming and Directory ...
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect </session-factory> </hibernate-configuration> ``` - **1.2.4 使用Ant构建** 可以使用Ant工具来自动化构建过程,包括编译代码、...