首先我想写:我知道为Spring Boot配置Hibernate JPA不是一个好主意,怎么说“这很愚蠢”,因为Spring Boot给了你自动配置等。好吧,我知道,但我正在自学Spring和Hibernate,我想一步一步地配置Hibernate,并注入Spring上下文。所以,我的问题是,我配置了Hibernate并将类写到配置中,它使用“persitence.xml”。@PersistenceContext的配置正常,EntityManager工作正常。但是,如果@Entity不包括在“persistence.xml”文件中,则不会添加到Hibernate上下文中。
build.gradle是针对jar文件的,这就是问题所在?
plugins {
id 'org.springframework.boot' version '2.1.9.RELEASE'
id 'io.spring.dependency-management' version '1.0.8.RELEASE'
id 'java'
}
group = 'com.kamil'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '8'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter'
compile("org.springframework.boot:spring-boot-starter-web")
testImplementation 'org.springframework.boot:spring-boot-starter-test'
compile group: 'org.springframework.boot', name: 'spring-boot-starter-data-jpa', version: '2.2.0.RELEASE'
/* compile group: 'org.hibernate', name: 'hibernate-core', version: '5.4.6.Final'
compile group: 'org.hibernate', name: 'hibernate-entitymanager', version: '5.4.8.Final'*/
compile("com.h2database:h2")
compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.18'
}
JPA的配置类:
@Configuration
@EnableJpaRepositories
@EnableTransactionManagement
public class HibernateConfiguration {
@Bean(name = "entityManagerFactory")
public LocalEntityManagerFactoryBean entityManagerFactoryBean(){
LocalEntityManagerFactoryBean factoryBean = new LocalEntityManagerFactoryBean();
factoryBean.setPersistenceUnitName("MySQL");
return factoryBean;
}
@Bean(name = "transactionManager")
public JpaTransactionManager JpaTransactionManagerBean(){
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactoryBean().getObject());
System.out.println("EMF "+entityManagerFactoryBean().getObject().toString());
return transactionManager;
}
}
谢谢回复。如果我理解错了,请指正。
添加我的评论作为答案,让我知道这是否有帮助:
来自LocalContainerEntityManagerFactoryBean文档:
与LocalEntityManagerFactoryBean一样,根据一般的JPA配置协定,配置设置通常从类路径中的META-INF/persistence.xml配置文件中读取。但是,这个FactoryBean更加灵活,因为您可以重写persistence.xml文件的位置,指定要链接到的JDBC数据源,等等。
不使用LocalEntityManagerFactoryBean,您可以执行以下操作:
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setPackagesToScan("pkg.containing.entities");
如果您想继续使用persistence.xml
和LocalEntityManagerFactoryBean
,可以通过向persistence.xml文件添加以下内容来尝试Hibernate自动检测功能
<property name="hibernate.archive.autodetection" value="class"/>
有关如何在这种情况下设置persistence.xml
的更多信息,请参见本文。
我正在用SpringBoot配置Consor,并在这里找到了一个文档。即使浏览了其他资源,也没有找到其他配置或场景。 因此,我很好奇当springboot应用程序与consul集成时是否只有这些配置可用。我想深入了解,有人能让我知道任何其他可用的属性吗?
问题内容: 我正在使用Hibernate JPA。我下面有Oracle存储过程。 如何调用此存储过程? 问题答案: 检查这个SO问题: 首先,您定义名为本地查询的存储过程: 然后使用以下命令执行它:
我正在尝试将Apache shiro 1.7.0添加为安全管理器,您会发现我的配置类: shiro的pom.xml条目: 该项目编译成功,但我得到了上面的错误,而试图访问web应用程序,我感谢任何麻或建议。 启动Tomcat上下文时出错。异常:org.springframework.beans.factory.beancreationexception。消息:创建类路径资源[org/apache/
我已经验证了@transaction方法是否正确放置,并且在调试堆栈中,我看到事务拦截器和实体管理器是根据对后端的请求创建的(因此没有guice持久性过滤器) 我的感觉表明问题在于会话上下文。我感觉(但我不能真正理解)它在多个请求上重用了我的持久性上下文。 我已经把一些框架放在一起,使这一切都能工作。我使用resteasy作为jax的实现者。guice(4.0beta4)作为cdi实现者,hibe
我正在尝试在我的Jersey/Hk2应用程序中注入EntityManagerFactory(作为一个单例)和EntityManager(在请求范围中)。 My EntityManagerFactoryProvider(单例): My EntityManagerProvider(每个请求)为: 我的应用程序是: 和web.xml 多谢