<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName"
value="com.microsoft.jdbc.sqlserver.SQLServerDriver" />
<property name="url"
value="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=ITSM_JBPM;SelectMethod=cursor;" />
<property name="username" value="sa" />
<property name="password" value="sa" />
</bean>
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"
singleton="true">
<!-------
问题一:property属性的名字能不能取成其他的名字?
mappingResources, hibernateProperties, dataSource
答案是: 不能随便取。
理由是:
package org.springframework.orm.hibernate3;
public class LocalSessionFactoryBean extends AbstractSessionFactoryBean {
private Resource[] mappingLocations;
private Properties hibernateProperties;
private DataSource dataSource;
public void setMappingResources(String[] mappingResources) {
this.mappingLocations = new Resource[mappingResources.length];
for (int i = 0; i < mappingResources.length; i++) {
this.mappingLocations[i] = new ClassPathResource(mappingResources[i].trim());
}
}
public void setHibernateProperties(Properties hibernateProperties) {
this.hibernateProperties = hibernateProperties;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
}
---->
<property name="mappingResources">
<list>
<value>
com/vandagroup/itsm/dataobject/attachment/ItsmAttachment.hbm.xml
</value>
<!-- ###################### -->
<!-- # jbpm mapping files 以下是配置的一些工作流相关的信息# -->
<!-- ###################### -->
<!-- hql queries and type defs -->
<value>org/jbpm/db/hibernate.queries.hbm.xml</value>
<!-- graph.def mapping files -->
<value>
org/jbpm/graph/def/ProcessDefinition.hbm.xml
</value>
</list>
<!-- # jbpm mapping files 这里不是我的重点。省略不提# -->
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<!-- # jbpm mapping files 这里是我的重点# -->
<!--
Hibernate SQL方言 (hibernate.dialect)
如果出现如下错误,则可能是Hibernate SQL方言 (hibernate.dialect)设置不正确。
Caused by: java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC][SQLServer]'last_insert_id' 不是可以识别的 函数名。
RDBMS | 方言 |
---|---|
DB2 | org.hibernate.dialect.DB2Dialect |
DB2 AS/400 | org.hibernate.dialect.DB2400Dialect |
DB2 OS390 | org.hibernate.dialect.DB2390Dialect |
PostgreSQL | org.hibernate.dialect.PostgreSQLDialect |
MySQL | org.hibernate.dialect.MySQLDialect |
MySQL with InnoDB | org.hibernate.dialect.MySQLInnoDBDialect |
MySQL with MyISAM | org.hibernate.dialect.MySQLMyISAMDialect |
Oracle (any version) | org.hibernate.dialect.OracleDialect |
Oracle 9i/10g | org.hibernate.dialect.Oracle9Dialect |
Sybase | org.hibernate.dialect.SybaseDialect |
Sybase Anywhere | org.hibernate.dialect.SybaseAnywhereDialect |
Microsoft SQL Server | org.hibernate.dialect.SQLServerDialect |
SAP DB | org.hibernate.dialect.SAPDBDialect |
Informix | org.hibernate.dialect.InformixDialect |
HypersonicSQL | org.hibernate.dialect.HSQLDialect |
Ingres | org.hibernate.dialect.IngresDialect |
Progress | org.hibernate.dialect.ProgressDialect |
Mckoi SQL | org.hibernate.dialect.MckoiDialect |
Interbase | org.hibernate.dialect.InterbaseDialect |
Pointbase | org.hibernate.dialect.PointbaseDialect |
FrontBase | org.hibernate.dialect.FrontbaseDialect |
Firebird | org.hibernate.dialect.FirebirdDialect |
-->
<prop key="hibernate.show_sql">true</prop>
<!------
hibernate.show_sql 如果为true,表示在程序运行时,会在控制台输出SQL语句,这有利于跟踪Hibernate的运行状态,默认为false。在应用开发和测试阶段,可以把这个属性设为true,以便跟踪和调试应用程序,在应用发布阶段,应该把这个属性设为false,以便减少应用的输出信息,提高运行性能
----->
<prop key="hibernate.generate_statistics">true</prop>
<!------
hibernate.generate_statistics | 如果开启, Hibernate将收集有助于性能调节的统计数据. 取值 true | false |
--->
<prop key="hibernate.cache.use_second_level_cache">
false
</prop>
<------
hibernate.cache.use_second_level_cache | 能用来完全禁止使用二级缓存. 对那些在类的映射定义中指定<cache>的类,会默认开启二级缓存. 取值 true|false |
--->
<prop key="hibernate.cache.use_query_cache">false</prop>
</props>
<!------
hibernate.cache.use_query_cache | 允许查询缓存, 个别查询仍然需要被设置为可缓存的. 取值 true|false |
---->
</property>
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>
<!-- transaction -->
<bean id="TransactionProxyFactoryBean"
class="org.springframework.aop.framework.ProxyFactoryBean">
<property name="proxyTargetClass">
<value>true</value>
</property>
<property name="singleton">
<value>false</value>
</property>
<property name="interceptorNames">
<list>
<value>transactionInterceptor</value>
</list>
</property>
</bean>
<bean id="transactionInterceptor"
class="org.springframework.transaction.interceptor.TransactionInterceptor">
<property name="transactionAttributes">
<props>
<prop key="find*">
PROPAGATION_REQUIRED,ISOLATION_DEFAULT,readOnly
</prop>
<prop key="*">
PROPAGATION_REQUIRED,ISOLATION_DEFAULT,-Exception
</prop>
</props>
</property>
<property name="transactionManager">
<ref bean="hibernateTransactionManager" />
</property>
</bean>
<bean id="hibernateTransactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<!----
package org.springframework.orm.hibernate3
public class HibernateTransactionManager extends AbstractPlatformTransactionManager
implements ResourceTransactionManager, BeanFactoryAware, InitializingBean {
private SessionFactory sessionFactory;
/**
* Set the SessionFactory that this instance should manage transactions for.
*/
public void setSessionFactory(SessionFactory sessionFactory) {
this.sessionFactory = sessionFactory;
}
}
-->
</bean>