如何将Hibernate实体外部化?
我正在开发一个基于Java/Spring/Hibernate的web应用程序,它是在Eclipse中开发的 这个web应用实际上是两个不同的项目,它们复制了两个Hibernate实体类以及各自的Hibernate存储库类。显然,最好将复制的代码移到外部JAR文件或其他文件中 从Hibernate文档中,我知道我应该将实体类放在一个新的JAVA项目中,该项目包含一个如何将Hibernate实体外部化?,hibernate,spring,jar,entity,external,Hibernate,Spring,Jar,Entity,External,我正在开发一个基于Java/Spring/Hibernate的web应用程序,它是在Eclipse中开发的 这个web应用实际上是两个不同的项目,它们复制了两个Hibernate实体类以及各自的Hibernate存储库类。显然,最好将复制的代码移到外部JAR文件或其他文件中 从Hibernate文档中,我知道我应该将实体类放在一个新的JAVA项目中,该项目包含一个persistence.xml文件。我还知道我可以将这个项目导出到一个JAR中,并将它包含在我的主要项目的类路径中。此外,我知道我应该
persistence.xml
文件。我还知道我可以将这个项目导出到一个JAR中,并将它包含在我的主要项目的类路径中。此外,我知道我应该从我的主项目中的hibernate.cfg.xml
引用这个JAR
出于某种原因,我现在正在进行的项目似乎并不那么简单
以下是问题:
persistence.xml
中应该如何注意这一点persistence.xml
的最小值是多少?例如,主项目已经配置了hibernate方言,所以我可以不使用这个外部JAR的persistence.xml
Hibernate.cfg.xml
中的
标记来引用我的外部JAR文件。那么,如果我的项目没有hibernate.cfg.xml
,该怎么办呢?我们有一个Spring的配置xml,它为org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean提供了一个annotatedClass
属性。我不太可能找到使用AnnotationSessionFactoryBean
引用外部JAR文件的示例“MY_TEST.jar”
,并且进一步假设“MY_TEST.jar”
有一个带注释的Hibernate类:src.shared.myEntity.java
我将如何使用下面的Spring配置摘录引用这个实体类?(不断获取ILLEGARGUMENTEXCEPTION:无论我如何尝试,几乎找不到类)
src.app.EntityA
src.app.EntityB
.........
Hibernate没有存储库的概念。
春天来了
Hibernate不关心持久实体类在哪里。
它们必须在类路径中,
这就是全部。
不管他们是在一个,
二
或者,如果所有这些jar都在类路径中,那么三个jar并不重要
根据需要组织项目,确保类路径中没有两个不同的hibernate配置文件。
我将使用一个项目来保存所有公共实体,可能还有它们关联的存储库,并让主项目定义hibernate配置文件
如果共享类的完全限定名为src.shared.myEntity,
然后,spring配置应具有以下行:
<property name="annotatedClasses">
<list>
...
<value>src.shared.myEntity</value>
</list>
</property>
这个罐子应该有,
从根本上说,
一个src
目录,
包含共享的
目录,
包含myEntity.class
文件
PS:将src
作为根包名真的很奇怪。
你为什么不尊重惯例:com.yourcompany.yourproject
PPS:类名应始终以大写字母开头:
MyEntity
而不是MyEntity
嘿,谢谢你的快速回复!对不起,我说错了存储库的事。我的类路径中有我的外部jar,但在使用Spring配置中的AnnotationSessionFactoryBean属性引用它时遇到问题。同样,Hibernate文档给出了一个关于如何使用Hibernate.cfg.xml文件实现这一点的清晰示例,但最初的项目架构师决定不包括这一点,而是通过Spring的配置来配置所有内容。一切都在编译中,但是spring找不到我的外部实体类。然后向我们展示您遇到问题的spring配置,并告诉我们发生了哪些异常(堆栈跟踪)。但是春天也不在乎罐子。如果某个类在类路径中,它会找到它。哦,对不起,我不是故意让人困惑的。我正在查看的实体和包结构确实遵循惯例…显然我在键入时失败:)而且,这很有趣,根据您发布的内容,我所拥有的应该可以正常工作。我确实按照您的建议进行了所有设置,并且我的JAR文件中的实体就像您所说的那样,在我的主项目中的spring配置文件中被引用。我一定还是错过了什么……嗯……嘿,顺便说一句,谢谢你抽出时间来帮我!
<property name="annotatedClasses">
<list>
...
<value>src.shared.myEntity</value>
</list>
</property>
package src.shared;
@Entity
public class myEntity {
// ...
}