我试图让hibernate扫描package-info.java文件,这样我就可以创建包级别注释,而不必在每个实体中定义注释。我发现这篇文章提到了如何做到这一点:
Why would Hibernate ignore package-info.java?
答案说补充一点:
<mapping package="com.foo.bar.thepackage">
到我的hibernate配置文件。但是,由于我只使用注释并使用LocalContainerEntityManagerFactoryBean,因此我没有Hibernate XML文件。如何使用jpa工厂设置此hibernate特定属性?
由于
答案 0 :(得分:0)
在LocalContainerEntityManager中,有一个名为setPackagesToScan
的方法。试试这个方法。
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setPackagesToScan("com.foo.bar.thepackage");
答案 1 :(得分:0)
我观察到Hibernate 4.3.1和Spring 4.0.2的相同问题
我的解决方法是将JPA配置注释从package-info.java移动到其中一个类。
似乎这不起作用,因为DefaultPersistenceUnitManager#entityTypeFilters
被初始化为仅过滤具有以下JPA注释的类:
entityTypeFilters = new LinkedHashSet<TypeFilter>(4);
entityTypeFilters.add(new AnnotationTypeFilter(Entity.class, false));
entityTypeFilters.add(new AnnotationTypeFilter(Embeddable.class, false));
entityTypeFilters.add(new AnnotationTypeFilter(MappedSuperclass.class, false));
try {
@SuppressWarnings("unchecked")
Class<? extends Annotation> converterAnnotation = (Class<? extends Annotation>)
DefaultPersistenceUnitManager.class.getClassLoader().loadClass("javax.persistence.Converter");
entityTypeFilters.add(new AnnotationTypeFilter(converterAnnotation, false));
}
catch (ClassNotFoundException ex) {
// JPA 2.1 API not available
}
答案 2 :(得分:0)
只需使用LocalContainerEntityManagerFactoryBean和几乎空的persistence.xml,并使用与LocalContainerEntityManagerFactoryBean中相同的持久性单元名称:
META-INF / persistence.xml中
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
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_2_0.xsd">
<persistence-unit name="sameAsInLocalContainerEntityManagerFactoryBean" transaction-type="RESOURCE_LOCAL">
<!-- This is your package-info -->
<class>com.foo.bar.thepackage</class>
</persistence-unit>
</persistence>