Spring Data 事物的开启不了
来源:互联网 发布:mac上看电视的软件 编辑:程序博客网 时间:2024/05/29 14:16
在进行Spring+SpringMVC+SpringData整合的时候,遇到一个问题。
<?xml version="1.0" encoding="UTF-8"?><persistence version="2.0" 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_2_0.xsd"> <!--持久模块名称 --> <persistence-unit name="dbconfig" transaction-type="RESOURCE_LOCAL"> <!--标记持久层的具体实现 --> <provider>org.hibernate.ejb.HibernatePersistence</provider> <!--数据库连接属性信息 --> <properties> <!--配置数据库驱动 --> <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver" /> <!--配置数据库url --> <property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/sss_sys?characterEncoding=UTF-8" /> <!--配置数据库用户名 --> <property name="hibernate.connection.username" value="lx" /> <!--配置数据库密码 --> <property name="hibernate.connection.password" value="lx" /> <!--配置Hibernate方言 --> <property name="hibernate.dialect" value="org.hibernate.dialect.MySQL57Dialect" /> <!--设置外连接抓取树的最大深度 --> <property name="hibernate.max_fetch_depth" value="10" /> <!--自动输出schema创建DDL语句 --> <property name="hibernate.hbm2ddl.auto" value="update" /> <!-- 显示SQL --> <property name="hibernate.show_sql" value="true" /> <!--格式化SQL语句 --> <property name="hibernate.format_sql" value="true" /> <!--验证 --> <property name="javax.persistence.validation.mode" value="none"/> </properties> </persistence-unit> </persistence>
明明配置的是org.hibernate.dialect.MySQL57Dialect方言,可是加载的时候,却总是说org.hibernate.dialect.MySQL5Dialect方言,导致建表的数据库引擎为MyISAM(该引擎不支持事物)。结果就是Spring的事物总是加不上。
原因:
<!--跟之前的sessionFactory,JPA操作数据库 --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <!--持久模块名称 --> <property name="persistenceUnitName" value="dbconfig"></property> <!--数据库连接信息的配置文件 --> <property name="persistenceXmlLocation" value="classpath:persistence.xml"></property> <!-- <property name="dataSource"></property> --> <!--jpa适配器 --> <property name="jpaVendorAdapter"> <!--基于hibernate的 --> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> <!--这里巨坑 --> <property name="database" value="MYSQL"></property> </bean> </property> </bean>
就是这个database属性搞的鬼:
看源码:
@Override public Map<String, Object> getJpaPropertyMap() { Map<String, Object> jpaProperties = new HashMap<String, Object>(); if (getDatabasePlatform() != null) { jpaProperties.put(Environment.DIALECT, getDatabasePlatform()); } //注意这里 else if (getDatabase() != null) { Class<?> databaseDialectClass = determineDatabaseDialectClass(getDatabase()); if (databaseDialectClass != null) { jpaProperties.put(Environment.DIALECT, databaseDialectClass.getName()); } } /** * Determine the Hibernate database dialect class for the given target database. * @param database the target database * @return the Hibernate database dialect class, or {@code null} if none found */ @SuppressWarnings("deprecation") protected Class<?> determineDatabaseDialectClass(Database database) { switch (database) { case DB2: return DB2Dialect.class; case DERBY: return DerbyDialect.class; // DerbyDialect deprecated in 4.x case H2: return H2Dialect.class; case HSQL: return HSQLDialect.class; case INFORMIX: return InformixDialect.class; case MYSQL: return MySQL5Dialect.class; case ORACLE: return Oracle9iDialect.class; case POSTGRESQL: return PostgreSQLDialect.class; // PostgreSQLDialect deprecated in 4.x case SQL_SERVER: return SQLServer2008Dialect.class; case SYBASE: return org.hibernate.dialect.SybaseDialect.class; // SybaseDialect deprecated in 3.6 but not 4.x default: return null; } }
因为设置database的值为MYSQL,导致最后加载的时候覆盖了原来的57方言,而使用MySQL5Dialect.class这个方言对MySQL数据库而言就是使用MYSQL,可是该引擎不支持事物。
解决方案:
<!--跟之前的sessionFactory,JPA操作数据库 --> <bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean"> <!--持久模块名称 --> <property name="persistenceUnitName" value="dbconfig"></property> <!--数据库连接信息的配置文件 --> <property name="persistenceXmlLocation" value="classpath:persistence.xml"></property> <!-- <property name="dataSource"></property> --> <!--jpa适配器 --> <property name="jpaVendorAdapter"> <!--基于hibernate的 --> <bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter"> </bean> </property> </bean>
这样就可以了,表的引擎为InnoDB,该引擎支持事物。
阅读全文
0 0
- Spring Data 事物的开启不了
- Spring中的开启事物的问题
- spring boot 开启声明事物
- Spring的事物管理
- Spring的事物配置
- Spring的事物管理
- spring的事物实现
- spring事物的传播
- spring的事物配置
- spring的事物管理
- spring里的事物
- spring的事物
- spring的事物
- Spring的事物类型
- Spring的事物
- spring的事物控制
- Spring的全局事物与局部事物
- redis事物的开启和终止
- 2017/8/18工作总结
- Jquery之搜索项菜单
- [lua/unity/cocos2dx]关于云风pbc不支持int64的解决办法 标签: unitycocos2d-xluauluapbc 2017-03-03 16:41 639人阅读 评论(0)
- 2175: GJJ的日常之再游戏
- Core ML 与 Vision:iOS 11 机器学习教程
- Spring Data 事物的开启不了
- 两个Zimbra邮件系统之间的LDAP认证
- Python 边做边学 8.7 工具类--缓存工具(RedisUtil)
- 全排列及相关扩展算法(七)——组合数的字典序(另含全章代码整理)
- Linux:使用xshell从win向linux传输文件
- 详解堆和栈
- Killer Names( 容斥定理,快速幂 )
- Java中线程安全与线程非安全ArrayList,Vector 和 HashMap,Hashtable 和StringBuffer,StringBuilder
- 原生js旋转木马