迁移到 Maven 项目后 Hibernate 映射错误
Hibernate mapping error after moving to Maven project
我的问题是使用 SessionFactory 映射实体。在我将其移至 Maven 项目之前,我的项目一直在运行。现在,当我使用 Maven 命令创建项目时,我的项目在映射实体方面存在问题。
我将 SessionFactory 与 hibernate.cfg.xml 文件一起使用。在其中我映射了所有实体。
在我导入 javax.persistence.Entity 的实体中。
你知道任何其他可能的问题吗?
[编辑]
我的配置文件:
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/report_db</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Drop and re-create the database schema on startup
<property name="hbm2ddl.auto">create-drop</property>-->
<!-- Mappings -->
<mapping class="com.bombardier.raportcreator.database.entity.impl.Lastfile" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Project" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Costcenter" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Month" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Resource" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Role" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Task" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Tasktocostcenter" />
</session-factory>
</hibernate-configuration>
示例实体 class:
import java.io.Serializable;
import javax.persistence.*;
@Entity
@NamedQuery(name="Lastfile.findAll", query="SELECT l FROM Lastfile l")
public class Lastfile implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private short id;
private String lastFileName;
public Lastfile() {
}
public short getId() {
return this.id;
}
public void setId(short id) {
this.id = id;
}
public String getLastFileName() {
return this.lastFileName;
}
public void setLastFileName(String lastFileName) {
this.lastFileName = lastFileName;
}
}
我的项目结构。 Pom是项目的主目录。显示实体。
[项目结构][1]:http://i.stack.imgur.com/bDl6l.png
异常:
Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.bombardier.raportcreator.database.entity.impl.Lastfile
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:776)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1462)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:100)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:678)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:670)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:665)
at com.bombardier.raportcreator.database.dao.DaoImpl.create(DaoImpl.java:20)
at com.bombardier.raportcreator.file.LastFileManager.setLastFileName(LastFileManager.java:34)
at Test.main(Test.java:48)
问题很明显 - 将 Hibernate 版本更改为最新版本(从 4.3.9 到 5.0.4)。我假设 Hibernate 在构建实体 class 或在新版本中映射它们时改变了一些东西。
我的问题是使用 SessionFactory 映射实体。在我将其移至 Maven 项目之前,我的项目一直在运行。现在,当我使用 Maven 命令创建项目时,我的项目在映射实体方面存在问题。 我将 SessionFactory 与 hibernate.cfg.xml 文件一起使用。在其中我映射了所有实体。 在我导入 javax.persistence.Entity 的实体中。 你知道任何其他可能的问题吗?
[编辑] 我的配置文件:
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/report_db</property>
<property name="hibernate.connection.username">root</property>
<property name="hibernate.connection.password"></property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">false</property>
<!-- Drop and re-create the database schema on startup
<property name="hbm2ddl.auto">create-drop</property>-->
<!-- Mappings -->
<mapping class="com.bombardier.raportcreator.database.entity.impl.Lastfile" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Project" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Costcenter" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Month" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Resource" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Role" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Task" />
<mapping class="com.bombardier.raportcreator.database.entity.impl.Tasktocostcenter" />
</session-factory>
</hibernate-configuration>
示例实体 class:
import java.io.Serializable;
import javax.persistence.*;
@Entity
@NamedQuery(name="Lastfile.findAll", query="SELECT l FROM Lastfile l")
public class Lastfile implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private short id;
private String lastFileName;
public Lastfile() {
}
public short getId() {
return this.id;
}
public void setId(short id) {
this.id = id;
}
public String getLastFileName() {
return this.lastFileName;
}
public void setLastFileName(String lastFileName) {
this.lastFileName = lastFileName;
}
}
我的项目结构。 Pom是项目的主目录。显示实体。 [项目结构][1]:http://i.stack.imgur.com/bDl6l.png
异常:
Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.bombardier.raportcreator.database.entity.impl.Lastfile
at org.hibernate.internal.SessionFactoryImpl.getEntityPersister(SessionFactoryImpl.java:776)
at org.hibernate.internal.SessionImpl.getEntityPersister(SessionImpl.java:1462)
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:100)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:192)
at org.hibernate.event.internal.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:38)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:177)
at org.hibernate.event.internal.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:32)
at org.hibernate.event.internal.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:73)
at org.hibernate.internal.SessionImpl.fireSave(SessionImpl.java:678)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:670)
at org.hibernate.internal.SessionImpl.save(SessionImpl.java:665)
at com.bombardier.raportcreator.database.dao.DaoImpl.create(DaoImpl.java:20)
at com.bombardier.raportcreator.file.LastFileManager.setLastFileName(LastFileManager.java:34)
at Test.main(Test.java:48)
问题很明显 - 将 Hibernate 版本更改为最新版本(从 4.3.9 到 5.0.4)。我假设 Hibernate 在构建实体 class 或在新版本中映射它们时改变了一些东西。