【问题标题】:Hibernate - scan entities休眠 - 扫描实体
【发布时间】:2016-12-05 12:34:26
【问题描述】:

我是入门级 Java 开发人员,我有 Hibernate 和属性文件 hibernate.cfg.xml 这样的项目

<?xml version="1.0" encoding="utf-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC                            
    "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
    "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/account?useSSL=false</property>
        <property name="hibernate.connection.password">root</property>
        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">create</property>
        <mapping class="ua.com.vtkachenko.entity.Group"></mapping>
        <mapping class="ua.com.vtkachenko.entity.Movement"></mapping>
        <mapping class="ua.com.vtkachenko.entity.Product"></mapping>
        <mapping class="ua.com.vtkachenko.entity.Description"></mapping>
    </session-factory>
</hibernate-configuration>

如何设置实体类的自动扫描并删除这些行?

<mapping class="ua.com.vtkachenko.entity.Group"></mapping>
<mapping class="ua.com.vtkachenko.entity.Movement"></mapping>
<mapping class="ua.com.vtkachenko.entity.Product"></mapping>
<mapping class="ua.com.vtkachenko.entity.Description"></mapping>

【问题讨论】:

  • 来自 DTD:&lt;!ATTLIST mapping package CDATA #IMPLIED&gt; 所以&lt;mapping package="..."/&gt;
  • 我用 &lt;mapping package="ua.com.vtkachenko.entity"/&gt; 替换了代码的 sn-p : &lt;mapping class="ua.com.vtkachenko.entity.Group"&gt;&lt;/mapping&gt; &lt;mapping class="ua.com.vtkachenko.entity.Movement"&gt;&lt;/mapping&gt; &lt;mapping class="ua.com.vtkachenko.entity.Product"&gt;&lt;/mapping&gt; &lt;mapping class="ua.com.vtkachenko.entity.Description"&gt;&lt;/mapping&gt; 但它仍然不起作用。 @RC

标签: java hibernate


【解决方案1】:

当你在spring上下文文件中定义sessionfactorybean时,你可以使用packagesToScan属性和@Entity注解来实现。

代码sn-p:

<bean id="sessionFactory" class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
  <property name="dataSource" ref="dataSource" />
  ... //other properties
  <property name="packagesToScan" value="ua.com.vtkachenko.entity">
  ../other properties
</bean>

现在在实体类上面写@Entity注解。此外,您的实体类应该具有 @Column 注释以与表列进行映射。

希望对您有所帮助。如果您有任何问题,请告诉我。

【讨论】:

  • 我将它插入我的 app-context.xml 并得到错误 线程“main”中的异常 org.hibernate.MappingException: Unknown entity: ua.com.vtkachenko.entity.Group at org .hibernate.impl.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:548)......
  • 我认为将Spring与Hibernate一起使用时解决它是正确的方法。在我的示例中,我有这样的项目结构!Screenshot.
【解决方案2】:

我建议你学习而不是这个:Spring boot 和 JPA。

如果你的目标只是学习,那会省去很多麻烦,恕我直言。

问候

【讨论】:

  • Spring Boot 和 JPA 确实提供了一个非常简洁的快速入门,但后来我在与注入和调试 Spring 作斗争时感到非常头疼(Spring 是巨大的并且势不可挡)。我最终放弃并完全停止使用 Spring 和 JavaEE,转而使用:github.com/mvysny/vaadin-on-kotlin(免责声明 - 我是作者)
【解决方案3】:

或者,如果您不想使用 Spring,这里有一个在 JavaSE 上使用纯 Hibernate 的解决方案 - 这将扫描您的整个类路径以查找 JPA 实体:https://stackoverflow.com/a/41845759/377320

【讨论】:

    猜你喜欢
    • 2018-11-06
    • 1970-01-01
    • 2016-01-23
    • 2021-04-18
    • 1970-01-01
    • 1970-01-01
    • 2019-08-12
    • 2012-09-09
    • 1970-01-01
    相关资源
    最近更新 更多