【问题标题】:How do you scan for @Entity at runtime via Hibernate?如何在运行时通过 Hibernate 扫描 @Entity?
【发布时间】:2013-02-12 13:12:49
【问题描述】:

Hibernate (JPA) 是否有任何内置机制在启动时扫描 @Entity 注释的 bean。我试图避免为每个持久对象维护特定的“hbm”文件。

现在我有以下内容:

Test.java

@Entity
public class Test {
 ...
}

Test.hbm.xml

<hibernate-mapping package="domain">
    <class name="Test" table="test">
    ...
    </class>
</hibernate-mapping>

【问题讨论】:

    标签: hibernate


    【解决方案1】:

    您可以为每个 hbm 文件创建所有 @Entity bean,然后您可以删除所有 hbm 文件,因为休眠 JPA 将在启动时将每个 bean 映射到特定表

    是的,它会在启动时映射,不用担心。

    你可以这样做

    <persistence-unit name="myPetStorePU">
        <description>Petstore Persistence Unit</description>
        <provider>oracle.toplink.essentials.ejb.cmp3.EntityManagerFactoryProvider</provider>
    
      <class>com.sun.javaee.blueprints.petstore.model.Tag</class>
      <class>com.sun.javaee.blueprints.petstore.model.SellerContactInfo</class>
      <class>com.sun.javaee.blueprints.petstore.model.Product</class>
      <class>com.sun.javaee.blueprints.petstore.model.Item</class>
      <class>com.sun.javaee.blueprints.petstore.model.Category</class>
      <class>com.sun.javaee.blueprints.petstore.model.Address</class>
      <class>com.sun.javaee.blueprints.petstore.model.ZipLocation</class>
        <properties>
            <property name="toplink.jdbc.driver" value="oracle.jdbc.driver.OracleDriver"/>
            <property name="toplink.jdbc.url" value="jdbc:oracle:thin:@#############"/>
            <property name="toplink.jdbc.user" value="####"/>
            <property name="toplink.jdbc.password" value="#####"/>
            <property name="toplink.logging.level" value="INFO"/>
        </properties>
    
    </persistence-unit>
    

    所有模型都是@Entity 类。

    【讨论】:

    • 感谢您的建议,但这不起作用。如果没有特定的 hbm 文件出现此错误:未知实体:测试
    • 但现在您必须更改配置文件,而不是加载 hbm.xml 文件,现在您必须使用 context:component scan
    • 完全不行,当您在该配置中创建 EntityManager 工厂时,您必须传递所有实体类而不是 hbm 文件。
    • 再次感谢,但是我正在寻找一种不需要维护单独实体(即persistance.xml)的解决方案。寻找一个在启动时运行的扫描仪,它收集所有使用@Entity 注释的类。如果尚不存在,我将构建一些自定义的东西。
    猜你喜欢
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2010-09-20
    • 2020-11-25
    • 1970-01-01
    • 2010-11-14
    • 2021-08-03
    相关资源
    最近更新 更多