问题
When I try compile with Maven I get this error:
INFO: HHH000041: Configured SessionFactory: null
Error creating Session: org.hibernate.InvalidMappingException: Could not parse mapping document from resource com/baskeitor/models/User.hbm.xml
But I don't see where is the error:
User.java
package main.java.com.project.models;
public class User implements java.io.Serializable {
private static final long serialVersionUID = 1L;
private Long id;
private String firstName;
private String secondName;
private String email;
private String password;
private Set<Artifact> artifact = new HashSet<Artifact>();
public User(){}
public User(String firstName, String secondName, String email, String password){
this.firstName = firstName;
this.secondName = secondName;
this.email = email;
this.password = password;
}
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Set<Artifact> getArtifacts() {
return teams;
}
public void setArtifacts(Set<Artifact> artifacts) {
this.teams = team;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getSecondName() {
return secondName;
}
public void setSecondName(String secondName) {
this.secondName = secondName;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
}
User.hbm.xml
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<hibernate-mapping package="com.project.models">
<class name="User" table="USER">
<id name="id" column="USER_ID">
<generator class="native"/>
</id>
<property name="firstName"/>
<property name="secondName"/>
<property name="email"/>
<property name="password"/>
</class>
</hibernate-mapping>
hibernate.cfg.xml
<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
<session-factory>
<!-- Database connection settings -->
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/db</property>
<property name="connection.username">user</property>
<property name="connection.password">pass</property>
<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<property name="dialect">org.hibernate.dialect.MySQLDialect</property>
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>
<property name="hbm2ddl.auto">create</property>
<mapping resource="com/project/models/User.hbm.xml"/>
</session-factory>
</hibernate-configuration>
I get this error when maven runs a test where I try get HibernateUtil.getSessionFactory();
回答1:
It seems like there is a couple of problems here, first of all, the hibernate mapping file can not be found. What's peculiar is that the location you are given in the maven output doesn't match the location you have specified in your hibernate config.
you have
<mapping resource="com/project/models/User.hbm.xml"/>
but hibernate is complaining about not being able to find com/baskeitor/models/User.hbm.xml
. This value is obviously arbitrarily being made up made up by hibernate, so it must be set somewhere. Try and search around for it using whichever tool you like to search though files with.
Also, there is a problem with the package attribute of your hibernate-mapping element, its set as com.project.models
in your hbm file but the actual package is main.java.com.project.models
.
So, since the package name you specify in the hibernate-mapping element is prefixed in-front of unqualified class names in the mapping document, class name in the class element will be com.project.models.User, which doesn't match the actual class name.
(On a side node, why not look using the annotations? They feel so much more natural to work with imho)
来源:https://stackoverflow.com/questions/13513403/hibernate-and-maven-could-not-parse-mapping-document-from-resource