我有一个JPA / Hibernate MVC应用程序,它连接到两个不同的Oracle模式,并在Tomcat上使用JSF来显示/操作数据。数据的Entity类使用@Entity注释,一切正常。我们称这个项目为“A”
我有第二个应用程序(我们称之为“B”),它使用项目A中的相同模型,所以我在B中有一个ant构建,它将Model类从A构建到一个jar文件中,这由项目B引用。(仅为信息项目B将部署到一个单独的服务器,并且只能通过REST调用访问,因此它不需要项目A的View元素。)
从Project B调用的大多数Entity类工作正常,它们被识别为实体并被数据填充等。但是对于一个Entity类,我得到“java.lang.IllegalArgumentException:Not an entity”。如果我在项目A中运行相同的Entity类,它可以正常工作,因此它不是类或persistence.xml的配置问题。
我已经调查了几天并尝试了各种各样的事情,包括将实体类拉到第三个“核心”项目中,该项目是从另外两个A和B引用的,这使事情变得更糟,因为然后,似乎没有任何@Entity类被识别为实体。这让我认为JPA / Hibernate的部分做了什么,它使用注释将@Entity注释转换为可用的实体类,而不是在某些类上运行,因此它们最终不会被识别为实体类,所以我看到“非实体”例外。
那么,我的预感是否正确,因为某些原因没有处理注释?如果是这样,我该如何解决?
如果没有,我错过了什么?
编辑添加:由于安全限制,我没有使用Spring(或Maven)
答案 0 :(得分:0)
好的,所以在@Ben Thurley的回复之后,我进行了仔细检查,发现我已经将persistence.xml中对类的显式引用添加到错误的持久性单元中。所以添加
<persistence-unit> <class>package.and.classname</class>
确实解决了这个问题,但我仍然想知道为什么我明确地为一个班级而不是另外一个班级做这个?