Hibernate - org.hibernate.MappingException: Unknown entity

0

XML cfg

<?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="hibernate.connection.driver_class">org.postgresql.Driver</property>
		<property name="hibernate.connection.url">jdbc:postgresql://localhost:5432/postgres</property>
		<property name="hibernate.connection.username">postgres</property>
		<property name="hibernate.connection.password">w</property>

		<!-- JDBC connection pool (use the built-in) -->
		<property name="hibernate.connection.pool_size">1</property>

		<!-- SQL dialect -->
		<property name="hibernate.dialect">org.hibernate.dialect.PostgreSQLDialect</property>

		<!-- Enable Hibernate's automatic session context management -->
		<property name="hibernate.current_session_context_class">thread</property>

		<!-- Disable the second-level cache -->
		<property name="hibernate.cache.provider_class">org.hibernate.cache.internal.NoCacheProvider
		</property>

		
		<!-- Echo all executed SQL to stdout -->
		<property name="hibernate.show_sql">true</property>

		<!-- Drop and re-create the database schema on startup -->
		<property name="hibernate.hbm2ddl.auto">create</property>
		<mapping class="com.stik.Employee"/>


	</session-factory>
</hibernate-configuration>

Servlett

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Configuration configuration = new Configuration();
      configuration.configure("hibernate.cfg.xml");
      ServiceRegistryBuilder serviceRegistryBuilder = new ServiceRegistryBuilder().applySettings(configuration
                      .getProperties());
      SessionFactory sessionFactory = configuration
                      .buildSessionFactory(serviceRegistryBuilder.buildServiceRegistry());
      Session session = sessionFactory.openSession();
      
      session.save(new Employee());
      session.beginTransaction().commit();
      
		
	}

Entity

package com.stik;

import javax.persistence.Entity;
import javax.persistence.Id;

@Entity
public class Employee {
	
	@Id
	private int id;
	private String firstName;
	private String lastName;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getFirstName() {
		return firstName;
	}
	public void setFirstName(String firstName) {
		this.firstName = firstName;
	}
	public String getLastName() {
		return lastName;
	}
	public void setLastName(String lastName) {
		this.lastName = lastName;
	}
	
}

Kompletnie nie wiem ocb, bo działało, nic nie zmieniłem i nie działa ;o
błąd: org.hibernate.MappingException: Unknown entity: com.stik.Employee

Wiem, że nie powinienem tak robić w Servlecie, ale wcześniej działało (w tym przypadku to chyba nic nie ma do rzeczy). Wiecie o co chodzi z tym błędem ? Przecież jest mapping file w cfg :/

0

Jeśli się nie mylę, a raczej się nie mylę to sprawa jest prosta.

Masz w encji Employee id które jest int. Nie widzę u Ciebie żadnych konstruktorów a więc masz domyślny jeden konstruktor bez argument-owy. Domyślnie w javie inty są ustawiane na -1 , a więc ty piszesz, że aplikacja Ci działała. Zadziałała Ci pewnie za pierwszym razem i dana encja została zapisana z id = -1 natomiast za drugim razem już nie zadziałało ponieważ encja z takim id już istniała. Więc masz 2 rozwiązania albo manualnie ustawisz id encji albo dodaj sobie @GeneratedValue(strategy=GenerationType.IDENTITY) do id aby twoje id było generowane przez system bazodanowy.

Napisz czy Ci działa

1 użytkowników online, w tym zalogowanych: 0, gości: 1