在Spring 3.1及更高版本中,LocalContainerEntityManagerFactoryBean应该能够在没有persistence.xml.的情况下配置JPA EntityManagerFactory。
当我使用PackagesToScan方法告诉工厂bean在哪里扫描我的实体类时,它似乎没有获取在包级别定义的Hibernate类型定义。
package-info.java:
@org.hibernate.annotations.TypeDefs({
@org.hibernate.annotations.TypeDef(name = "TypeA", typeClass = com.foo.type.A.class),
@org.hibernate.annotations.TypeDef(name = "TypeB", typeClass = com.foo.type.B.class) }) package com.foo.type;
spring-jpa.xml:
<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" lazy-init="true">
<property name="dataSource" ref="dataSource" />
<property name="persistenceProviderClass" value="org.hibernate.ejb.HibernatePersistence"/>
<property name="jpaVendorAdapter">
<bean class="org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter" />
</property>
<property name="jpaPropertyMap">
<map>
<entry key="hibernate.dialect" value="com.foo.FooDialect" />
<entry key="hibernate.default_schema" value="dba"/>
<entry key="hibernate.cache.use_query_cache" value="false"/>
<entry key="hibernate.cache.use_second_level_cache" value="true"/>
<entry key="hibernate.cache.region.factory_class" value="org.hibernate.cache.ehcache.SingletonEhCacheRegionFactory"/>
<entry key="net.sf.ehcache.configurationResourceName" value="META-INF/ehcache.xml" />
<entry key="javax.persistence.validation.factory" value-ref="validator"/>
</map>
</property>
<property name="packagesToScan">
<list>
<value>com.foo.domain</value>
<value>com.foo.type</value>
</list>
</property>
</bean>
有没有办法让这一切顺利进行?
我发现向包级别的typedefs添加@MappedSuperclass注释会导致Hibernate查找并处理它们。这似乎不是一个很好的解决方案,所以如果存在的话,我仍在寻找更好的方法。
package-info.java:
@MappedSuperclass // <---HACK TO CAUSE HIBERNATE TO NOTICE THESE TYPE DEFS
@TypeDefs({
@TypeDef(name = "TypeA", typeClass = com.foo.type.A.class),
@TypeDef(name = "TypeB", typeClass = com.foo.type.B.class)
})
package com.foo.type;
import javax.persistence.MappedSuperclass;
我有理由相信SpringBoot至少不会扫描实体类,尽管实体位于主包的子包中。我让它与@ComponentScan注释一起工作,至少在某种程度上是这样。但是,我注意到另一个组件也没有运行。我相信这是一件非常简单的事情,因为这是一份来自不同软件包的非常接近的副本。 注意:我尝试添加@ComponentScan,@EntityScan,@EnableJpaRepository。这已经摆脱了最初的错误,
本文向大家介绍详解spring自动扫描包,包括了详解spring自动扫描包的使用技巧和注意事项,需要的朋友参考一下 配置文件 前面的例子我们都是使用XML的bean定义来配置组件。在一个稍大的项目中,通常会有上百个组件,如果这些组件采用XML的bean定义来配置,显然会增加配置文件的体积,查找及维护起来也不太方便。 Spring2.5为我们引入了组件自动扫描机制,它可以在类路径底下寻找标注了@Co
我认为以下代码可以工作: 但是我得到了一个编译器错误(见这里):
我试图让我的日志使用log4j2和yaml工作,一直在挣扎。 这个包是com的。eclipse非常嘈杂,所以我只想在warn或更高级别记录来自该包的消息。对于我的软件包,我希望将调试及以上记录到滚动追加器,并将错误或以上记录到错误日志。在控制台上,我想看到除org之外的所有东西的debug。埃普利斯 使用当前配置,我看不到组织。eclipse调试消息,很好,我看到了com。myorganizati
在spring boot应用程序中,我有一个包含应用程序类包,如 默认情况下,它自动从该类的包中设置ComponentScan。然后我有几个子包,每个子包包含几个组件和服务bean(使用注释)。但是为了对不同的用例重用这个应用程序,我需要启用/禁用一些子包中的所有组件,最好是通过一个属性。 那就是我有一些子包,比如 现在,基于某些属性,我想在其中一个包中启用(扫描)bean,例如。 我以为我可以使