如何将Hibernate实体外部化?

如何将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中,并将它包含在我的主要项目的类路径中。此外,我知道我应该

我正在开发一个基于Java/Spring/Hibernate的web应用程序,它是在Eclipse中开发的

这个web应用实际上是两个不同的项目,它们复制了两个Hibernate实体类以及各自的Hibernate存储库类。显然,最好将复制的代码移到外部JAR文件或其他文件中

从Hibernate文档中,我知道我应该将实体类放在一个新的JAVA项目中,该项目包含一个
persistence.xml
文件。我还知道我可以将这个项目导出到一个JAR中,并将它包含在我的主要项目的类路径中。此外,我知道我应该从我的主项目中的
hibernate.cfg.xml
引用这个JAR

出于某种原因,我现在正在进行的项目似乎并不那么简单

以下是问题:

  • 在保存共享代码的外部项目中,是否也可以包含Hibernate存储库类it?如果确实需要,那么在
    persistence.xml
    中应该如何注意这一点

  • 在我的外部JAR中,
    persistence.xml
    的最小值是多少?例如,主项目已经配置了hibernate方言,所以我可以不使用这个外部JAR的
    persistence.xml

  • 从Hibernate文档中,我知道我可以使用我的
    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 {
        // ...
    }