我有以下情况:
Project A - Contains a DB-Configurations and Creates Session_Factory at Init.
Project B - Contains entities and using Project A to persist entities.
Project C - Contains entities and using Project A to persist entities.
我正在使用karaf在基于OSGi的环境中工作。我正在制作使用Project A来保存其实体的小组件/ Bundles。项目A将首先加载,因为其他人依赖它。
项目A将在开始时启动会话工厂,但没有任何包/类来扫描实体。
现在任何包试图使用项目A来保持对象将最终出现异常,这很明显
org.hibernate.MappingException:未知实体:
有没有办法可以在不扫描任何包/类的情况下保留实体...?
答案 0 :(得分:1)
SessionFactory必须在持久化之前了解实体。在您的情况下,如果您将一些类从B和C注册到A,则SessionFactory可能会存储对这些类的一些引用,从而破坏模块性。
我对你的建议是:
答案 1 :(得分:1)
Hibernate与OSGi的搭配并不好。请参阅http://docs.jboss.org/hibernate/orm/4.2/devguide/en-US/html/ch17.html#d5e5021
上的警告EclipseLink通过Gemini项目支持OSGi,但是它有类似的限制: http://wiki.eclipse.org/Gemini/JPA/Documentation/Limitations
Apache Aries JPA允许您通过清单中的Meta-Persistence标头创建每个Bundle的PersistenceUnit:http://aries.apache.org/modules/jpaproject.html。这可以允许你在B和C之间共享项目A中的persistence.xml,但是我猜这仍然会创建两个不同的PersistenceUnits / SessionFactories。