GVKun编程网logo

无法使用Spring JPA Vendor Adapter使Hibernate停止显示SQL

3

此处将为大家介绍关于无法使用SpringJPAVendorAdapter使Hibernate停止显示SQL的详细内容,此外,我们还将为您介绍关于DAOandServicelayers(JPA/Hibe

此处将为大家介绍关于无法使用Spring JPA Vendor Adapter使Hibernate停止显示SQL的详细内容,此外,我们还将为您介绍关于DAO and Service layers (JPA/Hibernate + Spring)、Dao 层系列 - 7-Hibernate Spring Data JPA、EclipseLinkJpaVendorAdapter而不是HibernateJpaVendorAdapter问题、HibernateJpaVendorAdapter的generateDdl不会更改表的有用信息。

本文目录一览:

无法使用Spring JPA Vendor Adapter使Hibernate停止显示SQL

无法使用Spring JPA Vendor Adapter使Hibernate停止显示SQL

Hibernate继续将SQL跟踪发送到stdout,当隐藏在JPA适配器后面时,我不知道如何更改Hibernate配置属性。这是entityManagerFactory的Spring
bean:

<bean id="entityManagerFactory">    <property name="dataSource" ref="ssapDataSource"/>    <property name="jpaVendorAdapter">        <bean>            <property name="showSql" value="false"/>        </bean>    </property></bean>

即使将showSql属性设置为false,Hibernate也会继续打印SQL。

我试图用“ hibernate.show_sql = false”在类路径中创建一个hibernate.properties文件,但是它也没有。

答案1

小编典典

尝试在persistance.xml中设置它

<persistence>  <persistence-unit name="PU">    <properties>      <property name="hibernate.show_sql" value="false"/>    </properties>  </persistence-unit></persistence>

DAO and Service layers (JPA/Hibernate + Spring)

DAO and Service layers (JPA/Hibernate + Spring)

我正在设计一个基于JPA / Hibernate,Spring和Wicket的新应用。不过,DAO和Service层之间的区别对我来说还不清楚。根据维基百科,DAO是

一个为某种类型的数据库或持久性机制提供抽象接口的对象,提供一些特定的操作而不公开数据库的详细信息。

我想知道DAO是否可以包含与数据访问无关的方法,但是使用查询执行起来会更容易吗?例如,“获取在一组特定机场上运营的所有航空公司的列表”?在我看来,它更像是一种服务层方法,但是我不确定在服务层中使用JPA EntityManager是否是一种良好做法的示例?

Dao 层系列 - 7-Hibernate Spring Data JPA

Dao 层系列 - 7-Hibernate Spring Data JPA

本篇完整代码可见:https://git.oschina.net/yaolifei/test/tree/master/test-hibernate-spring-data-jpa

Spring Data JPA 又对代码做了一些精简,Dao 如果没有复杂的逻辑,可以直接写一个接口继承自 Spring Data JPA 的相关接口就可以了,不需要实现。

applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:jpa="http://www.springframework.org/schema/data/jpa"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.2.xsd
	http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.2.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd
	http://www.springframework.org/schema/data/jpa http://www.springframework.org/schema/data/jpa/spring-jpa.xsd">
 
	<context:component-scan base-package="com.yaolifei.test" />
 	
	<context:property-placeholder location="jdbc.properties" />
	
	<bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close"> 
		<property name="driverClassName" value="${jdbc.driverClassName}" /> 
		<property name="url" value="${jdbc.url}" /> 
		<property name="username" value= "${jdbc.username}" /> 
		<property name="password" value="${jdbc.password}" /> 
		<property name="maxActive" value="${jdbc.maxActive}" /> 
		<property name="validationQuery" value="${jdbc.validationQuery}" /> 
	</bean> 
	
	<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
		<property name="dataSource" ref="dataSource" />
		<property name="packagesToScan" value="com.yaolifei.test" />
		<property name="jpaVendorAdapter">
			<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
		</property>
		<property name="jpaProperties">
			<props>
				<prop key="hibernate.hbm2ddl.auto">update</prop>
				<prop key="hibernate.show_sql">true</prop>
				<prop key="hibernate.dialect">org.hibernate.dialect.MySQL5Dialect</prop>
			</props>
		</property>
	</bean>
 
	<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">  
		<property name="entityManagerFactory" ref="entityManagerFactory" />  
	</bean> 
	
	<jpa:repositories base-package="com.yaolifei.test.user.dao"
		entity-manager-factory-ref="entityManagerFactory" 
		transaction-manager-ref="transactionManager"/> 
        
	<tx:annotation-driven transaction-manager="transactionManager" />
	
	<bean class="org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor" />  

</beans>
UserDao.java
package com.yaolifei.test.user.dao;

import org.springframework.data.jpa.repository.JpaRepository;

import com.yaolifei.test.user.domain.User;

public interface UserDao extends JpaRepository<User, Integer> {
	
}
这么多就够了,UserDaoImpl 已删除,稍微调整一下 API 就可以了

EclipseLinkJpaVendorAdapter而不是HibernateJpaVendorAdapter问题

EclipseLinkJpaVendorAdapter而不是HibernateJpaVendorAdapter问题

使用由JSF,Spring和Hibernate组成的应用程序。我的示例正常运行,然后当我将class =“
org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter”更改为class =“
org.springframework.orm.jpa.vendor.EclipseLinkJpaVendorAdapter”时,应用程序无法正常运行。有什么问题?JPA专业化实现都是其中之一。

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
       xmlns:p="http://www.springframework.org/schema/p"
    xmlns:aop="http://www.springframework.org/schema/aop"
       xmlns:context="http://www.springframework.org/schema/context"
    xmlns:jee="http://www.springframework.org/schema/jee"
       xmlns:tx="http://www.springframework.org/schema/tx"
    xsi:schemaLocation="
            http://www.springframework.org/schema/aop 
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
            http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
            http://www.springframework.org/schema/context
 http://www.springframework.org/schema/context/spring-context-3.0.xsd
            http://www.springframework.org/schema/jee
 http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
            http://www.springframework.org/schema/tx
 http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

<context:annotation-config />
<context:component-scan base-package="com.usta.spring" />
 <tx:annotation-driven />

<bean id="entityManagerFactory"p:dataSource-ref="dataSource" >
    <!-- p:jpaVendorAdapter-ref="jpaAdapter"-->
  <!--  <property name="loadTimeWeaver">
       <bean/>
    </property>     -->

    <property name="jpaVendorAdapter" ref="jpaAdapter">

    </property>
    <property name="persistenceUnitName" value="Spring_PU"/>
</bean>


<bean id="dataSource"p:driverClassName="com.mysql.jdbc.Driver" p:url="jdbc:mysql://localhost/spring"
        p:username="root" p:password="root" />

<bean id="transactionManager">
    <property name="entityManagerFactory" ref="entityManagerFactory"/>
</bean>

    <bean id="jpaAdapter">
        <property name="showSql" value="true"/>
        <property name="generateDdl" value="true"/>
        <property name="database" value="MYSQL"/>
    </bean>

<!--    <bean id="jpaAdapter"p:database="MYSQL" p:showSql="true" p:generateDdl="true" />    -->

<!--    <bean id="yazikontrolor"scope="request"/>  -->


</beans>

错误:

May 27,2012 7:21:49 AM org.apache.catalina.core.ApplicationContext log
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'yaziServisi': Injection of persistence dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/marmara.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Cannot apply class transformer without LoadTimeWeaver specified
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:341)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1073)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:516)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585)
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:895)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:425)
    at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:282)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:204)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
    at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4206)
    at org.apache.catalina.core.StandardContext.start(StandardContext.java:4705)
    at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:799)
    at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:779)
    at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:601)
    at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:675)
    at org.apache.catalina.startup.HostConfig.deployDescriptors(HostConfig.java:601)
    at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:502)
    at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1317)
    at org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:324)
    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:142)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1065)
    at org.apache.catalina.core.StandardHost.start(StandardHost.java:840)
    at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1057)
    at org.apache.catalina.core.StandardEngine.start(StandardEngine.java:463)
    at org.apache.catalina.core.StandardService.start(StandardService.java:525)
    at org.apache.catalina.core.StandardServer.start(StandardServer.java:754)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:595)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:289)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:414)
Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'entityManagerFactory' defined in ServletContext resource [/WEB-INF/marmara.xml]: Invocation of init method failed; nested exception is java.lang.IllegalStateException: Cannot apply class transformer without LoadTimeWeaver specified
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1422)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:518)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:455)
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:293)
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:290)
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:192)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findDefaultEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:529)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.findEntityManagerFactory(PersistenceAnnotationBeanPostProcessor.java:495)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.resolveEntityManager(PersistenceAnnotationBeanPostProcessor.java:656)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor$PersistenceElement.getResourceToInject(PersistenceAnnotationBeanPostProcessor.java:629)
    at org.springframework.beans.factory.annotation.InjectionMetadata$InjectedElement.inject(InjectionMetadata.java:147)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:84)
    at org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor.postProcessPropertyValues(PersistenceAnnotationBeanPostProcessor.java:338)
    ... 37 more
Caused by: java.lang.IllegalStateException: Cannot apply class transformer without LoadTimeWeaver specified

HibernateJpaVendorAdapter的generateDdl不会更改表

HibernateJpaVendorAdapter的generateDdl不会更改表

我正在使用Spring + JPA + Hibernate开发一个网站。在持久性配置(JPA +
Hibernate)中,我将HibernateJpaVendorAdapter的generateDdl属性设置为true,实际上新实体在数据库中正确创建了新表。

但是,一旦创建了表,如果我向实体添加属性,我希望HibernateJpaVendorAdapter能够更改表并添加列。这没有发生,这很奇怪,因为在Java
AbstractJpaVendorAdapter的setGenerateDdl方法文档中有:“设置是否在EntityManagerFactory初始化后创建,
更新 / 更新 所有相关表后生成DDL 。”

JPA + Hibernate配置:

<bean id="dataSource">    <property name="driverClassName" value="${db.driverClassName}" />    <property name="url" value="${db.url}" />    <property name="username" value="${db.username}" />    <property name="password" value="${db.password}" /></bean><bean id="jpaAdapter">    <property name="databasePlatform" value="org.hibernate.dialect.MySQL5Dialect" />    <property name="showSql" value="${db.showSql}" />    <property name="generateDdl" value="${db.generateDdl}" /></bean><bean id="entityManagerFactory">    <property name="jpaVendorAdapter" ref="jpaAdapter" />    <property name="jpaProperties">        <props>            <prop key="hibernate.show_sql">true</prop>            <prop key="hibernate.format_sql">true</prop>        </props>    </property>    <property name="dataSource" ref="dataSource" /></bean>

persistence.xml:

<?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="m8tsPU" /></persistence>

难道我做错了什么?

答案1

小编典典

通过直接设置适当的特定于Hibernate的属性,您可以对DDL生成进行更细粒度的控制:

<bean id="entityManagerFactory">     ...    <property name="jpaProperties">        <props>            <prop key="hibernate.hbm2ddl.auto">update</prop>            ...        </props>    </property></bean>

或者,可以使用create-drop代替update,因为update在某些情况下可能会引起问题。但是请注意,自动DDL更新不适合生产使用。

关于无法使用Spring JPA Vendor Adapter使Hibernate停止显示SQL的介绍现已完结,谢谢您的耐心阅读,如果想了解更多关于DAO and Service layers (JPA/Hibernate + Spring)、Dao 层系列 - 7-Hibernate Spring Data JPA、EclipseLinkJpaVendorAdapter而不是HibernateJpaVendorAdapter问题、HibernateJpaVendorAdapter的generateDdl不会更改表的相关知识,请在本站寻找。

本文标签: