如何使用谷歌思考动态扫描带注释的类?

时间:2016-05-13 08:01:33

标签: java hibernate google-reflections

参考this。我正在制作一个hibernate演示,我想在其中动态映射所有POJO类。我找到了上面给出的引用,并尝试仅从包映射中扫描我的类。但它给出了一些错误:

let objPost = Post.objectWithPrimaryKeyValue(Post_id)

当我添加 com.google.common_1.0.0.201004262004.jar 时,我得到了这个:

Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Predicate
at com.telemune.util.StringUtil.getSessionFactory(StringUtil.java:44)
at com.telemune.generator.TableDescriber.describeTable(TableDescriber.java:33)
at com.telemune.generator.PojoGenerator.main(PojoGenerator.java:169)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Predicate
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
... 3 more

我无法询问或评论那就是为什么我在这里特别要求@MartinAubele,@ Joathan,@ SergeyBrunov,@ ArthurRonald。请举例说明我可以使用谷歌反射来扫描我的包裹。

注意:我不想使用Spring。所以请不要暗示这一点。在此先感谢。

一些代码示例:

 Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.collect.ImmutableSet.copyOf(Ljava/util/Collection;)Lcom/google/common/collect/ImmutableSet;
at org.reflections.Reflections.getTypesAnnotatedWith(Reflections.java:358)
at com.telemune.util.StringUtil.getSessionFactory(StringUtil.java:46)
at com.telemune.generator.TableDescriber.describeTable(TableDescriber.java:33)
at com.telemune.generator.PojoGenerator.main(PojoGenerator.java:169)

另一个问题是: configuration.buildSessionFactory(); 不允许我使用 的 configuration.buildSessionFactory(serviceRegistry);

1 个答案:

答案 0 :(得分:0)

您需要使用Reflections库的有效版本:

reflections-0.9.10.jar

有依赖关系:

com.google.guava:guava:18.0

org.javassist:javassist:3.18.2-GA

com.google.code.findbugs:annotations:2.0.1

可以在那里找到依赖项列表:http://mvnrepository.com/artifact/org.reflections/reflections/0.9.10

或者只是使用Maven

<dependency>
    <groupId>org.reflections</groupId>
    <artifactId>reflections</artifactId>
    <version>0.9.10</version>
</dependency>

图书馆资源和文档:reflections

我有一个项目,可以根据StackOverflow上的答案对各种库进行测试(就像链接是由你提供的):

hibernate-scanners-test

使用Reflections的示例:ReflectionsLibrary.java

所有图书馆的测试类:ScannersTest.java

<强>更新

修复

java.lang.NoSuchMethodError: org.hibernate.integrator.internal.IntegratorServiceImpl

你只需要一组有效的Hibernate库。例如,对于Hibernate 4.3.5:libs_h4