Hibernate error - org.hibernate.MappingException:

2019-09-11 05:49发布

问题:

guys ! i have very strange problem with hibernate 5. I receive Exception in thread "main" org.hibernate.MappingException: Unknown entity: com.rosko.Merchandiser When i remove configuration.addAnnotatedClass(com.rosko.Merchandiser.class)

HibernateUtil.java

public class HibernateUtil {

private static final SessionFactory sessionFactory = buildSessionFactory();

private static SessionFactory buildSessionFactory() {
    try {
        Configuration configuration = new Configuration();
        configuration.configure();
        /* **With this line, everyting is working..** configuration.addAnnotatedClass(com.rosko.Merchandiser.class);*/
        return configuration.buildSessionFactory(
                new StandardServiceRegistryBuilder().applySettings(configuration.getProperties()).build());
    } catch (Exception e) {
        e.printStackTrace();
        throw new RuntimeException("There was an error building the factory");
    }
}

public static SessionFactory getSessionFactory() {
    return sessionFactory;
}}

Application.java

public class Application {

public static void main(String[] args) {


    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();

    Merchandiser merchant = new Merchandiser();

    merchant.setAddress("Viena");
    merchant.setName("sadkada");

    session.save(merchant);     


    session.getTransaction().commit();
    session.close();
}
}

hibernate.cfg.xml

<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/finance?serverTimezone=UTC</property>
    <property name="connection.username">root</property>
    <property name="connection.password">rozeto90</property>
    <!-- SQL dialect -->
    <property name="dialect">org.hibernate.dialect.MySQL5Dialect</property>
    <!-- Echo all executed SQL to stdout -->
    <property name="show_sql">true</property>


      <mapping class="com.rosko.Merchandiser" />

</session-factory>

Merchandiser.java

  @Entity
@Table(name="merchandiser")
public class Merchandiser {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
@Column(name="name")
private String name;

@Column(name= "address")
private String address;

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public String getAddress() {
    return address;
}

public void setAddress(String address) {
    this.address = address;
}


}

Can i use the xml file only for mapping class ?

Best regards.

回答1:

make sure that file name and path of hibernate.cfg.xml are proper.

path = src/main/resources/hibernate.cfg.xml

Also try to use below HibernateUtil class :

import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import org.hibernate.service.ServiceRegistry;
import org.hibernate.service.ServiceRegistryBuilder;

public class HibernateUtil {
    private static final SessionFactory sessionFactory = buildSessionFactory();

    private static SessionFactory buildSessionFactory() {
        Configuration configuration = new Configuration();
        configuration.configure();
        ServiceRegistry serviceRegistry = new ServiceRegistryBuilder()
                .applySettings(configuration.getProperties())
                .buildServiceRegistry();
        return configuration.buildSessionFactory(serviceRegistry);
    }

    public static SessionFactory getSessionFactory() {
        return sessionFactory;
    }

    public static void shutdown() {
        // Close caches and connection pools
        getSessionFactory().close();
    }
}