当前位置: 首页 > 面试题库 >

具有Hibernate.cfg.xml的PropertyPlaceholderConfigurer

漆雕皓轩
2023-03-14
问题内容

我有2个需要绑定在一起的文件:hibernate.cfg.xml和hibernate属性。如何使用PropertyPlaceholderConfigurer将它们彼此指向?是否可以不将它们声明为bean?(我是Spring的初学者)。每个答案表示赞赏。

提前致谢。

纳扎尔

hibernate.cfg.xml:

<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-configuration SYSTEM 
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>
           <bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="db">
            <value>hibernate.properties</value>
        </property>
    </bean>
        <property name="hibernate.dialect">${db.dialect}</property>
        <property name="hibernate.connection.driver_class">${db.driver}</property>
        <property name="hibernate.connection.url">${db.url}</property>
        <property name="hibernate.connection.username">${db.username}</property>
        <property name="hibernate.connection.password">${db.password}</property>
        <property name="connection.pool_size">${db.pool_size}</property>
        <property name="current_session_context_class">${db.current_session_context_class}</property>
        <property name="hibernate.show_sql">${db.show_sql}</property>
        <property name="hibernate.cache.provider_class">${db.provider_class}</property>
        <property name="hibernate.cache.use_second_level_cache">${db.use_second_level_cache}</property>
        <property name="hibernate.cache.use_query_cache">${db.use_query_cache}</property>
        <property name="hibernate.hbm2ddl.auto">${db.hbm2ddl_auto}</property>
        <property name="hibernate.hbm2ddl.import_files">${db.import_files}</property>
        <mapping class="com.dataart.mediaportal.model.User"/>
        <mapping class="com.dataart.mediaportal.model.Album"/>
        <mapping class="com.dataart.mediaportal.model.Role"/>
        <mapping class="com.dataart.mediaportal.model.Image"/>

    </session-factory>
</hibernate-configuration>

hibernate.properties:

db.username=postgres
db.password=4351
db.driver=org.postgresql.Driver
db.url=jdbc:postgresql://localhost/MediaPortalDB
db.pool_size=1
db.dialect=org.hibernate.dialect.PostgreSQLDialect
db.import_files=import.sql
db.hbm2ddl_auto=create
db.use_query_cache=true
db.use_second_level_cache=true
db.provider_class=org.hibernate.cache.HashtableCacheProvider
db.show_sql=true
db.current_session_context_class=thread

问题答案:

是的,您可以访问两个文件并使用它们创建会话工厂。但是不要在hibernate配置文件中执行此操作。我建议在应用程序上下文中执行此操作,因为首先,您的hibernate.cfg.xml不包含声明Bean所需的名称空间,其次是。它需要由上下文配置器读取,以便可以实例化bean。

在应用程序上下文中,您可以使用hibernate.properties文件创建数据源,如下所示。

<bean id="propertyConfigurer"
class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer"
p:location="{location of hibernate properties files}" />

<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="driverClass" value="${db.driverClassName}"/>
    <property name="jdbcUrl" value="${db.databaseurl}"/>
    ....other properties...
</bean>

最后,像这样创建一个会话工厂

<beans:bean id="sessionFactory"
        class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
        <beans:property name="dataSource" ref="dataSource" />
        <beans:property name="configLocation">
            <beans:value>classpath:hibernate.cfg.xml</beans:value>
        </beans:property>
        <beans:property name="configurationClass">
            <beans:value>org.hibernate.cfg.AnnotationConfiguration</beans:value>
        </beans:property>

这将为您创建一个会话工厂单例实例,可以使用“自动装配”进行访问。



 类似资料:
  • 问题内容: 我不想拥有hibernate.cfg.xml文件。而是我想通过我的代码进行所有配置,如下所示。 我已经尝试了上述方法。但是我面临的问题是hibernate抛出一个异常,说“ ”。 保留文件真的是强制性的吗? 提前致谢 问题答案: 我相信这是由于您对对象的调用。尝试删除该文件,hibernate状态将不会查找不存在的文件。基本上,您是通过对象设置所有必需的属性,因此并不需要告诉Hiber

  • 问题内容: 我如何获得Spring来从中加载Hibernate的属性? 我们正在使用Spring和JPA(以Hibernate作为实现)。Spring 指定了JPA语言和Hibernate属性: 在这种配置中,Spring通过applicationContext.xml读取所有的Hibernate属性。当我创建一个(位于我的类路径的根,与META- INF处于同一级别)时,Hibernate根本不

  • 问题内容: 要清除一些混乱。我有applicationContext.xml。 问题1: 1和2有什么区别?不同的方法都相同吗? 问题2: 我在Spring论坛上问了一些问题。他提到的有关合并的内容如下 如果您需要/想要使用内部连接池进行hibernate,我会建议您这样做,只需配置一个支持连接池的数据源并将其注入到sessionfactorybean中即可。 hibernate的内部连接池= 这

  • 问题内容: 我如何让Spring从中加载Hibernate的属性? 我们正在使用Spring和JPA(以Hibernate作为实现)。Spring 指定了JPA语言和Hibernate属性: 在这种配置中,Spring通过applicationContext.xml读取所有的Hibernate属性。当我创建一个(位于我的类路径的根目录,与META- INF处于同一级别)时,Hibernate根本不

  • 问题内容: 我是Hibernate的新手,正在阅读《 Hibernate的Java持久性》这本书,并尝试从那里实现该示例。到目前为止,我的Ant构建是成功的,但是当我尝试执行包含main方法的类时,却收到此错误消息: 很明显,hibernate状态找不到我的配置文件,该文件位于根目录中。 项目 我的完整源代码可以在这里找到:http : //pastebin.com/bGDUrxUf 我有一个正在

  • 问题内容: 我的项目是这样的: 有人可以告诉我将hibernate.cfg.xml放在哪里吗? 因为出现此错误: 问题答案: 配置文件必须位于上。 根据您的项目,这可以通过不同的方式来完成。 对于 Web应用程序WAR 项目(您正在Servlet容器中运行程序):当应用程序在容器中运行时,将其放入将在类路径上可见的文件中起作用。 对于 Maven的 风格的项目(在Servlet容器没有运行该程序)