此处将为大家介绍关于无法使用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
- DAO and Service layers (JPA/Hibernate + Spring)
- Dao 层系列 - 7-Hibernate Spring Data JPA
- EclipseLinkJpaVendorAdapter而不是HibernateJpaVendorAdapter问题
- HibernateJpaVendorAdapter的generateDdl不会更改表
无法使用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)
我正在设计一个基于JPA / Hibernate,Spring和Wicket的新应用。不过,DAO和Service层之间的区别对我来说还不清楚。根据维基百科,DAO是
一个为某种类型的数据库或持久性机制提供抽象接口的对象,提供一些特定的操作而不公开数据库的详细信息。
我想知道DAO是否可以包含与数据访问无关的方法,但是使用查询执行起来会更容易吗?例如,“获取在一组特定机场上运营的所有航空公司的列表”?在我看来,它更像是一种服务层方法,但是我不确定在服务层中使用JPA EntityManager是否是一种良好做法的示例?
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问题
使用由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不会更改表
我正在使用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不会更改表的相关知识,请在本站寻找。
本文标签: