Hibernate problem z konfiguracją

0

Od kilku godzin walcze z JPA 2.0 jako dostawca jest Hibernate była wersja 4.1.8 ale teraz na starszą zmieniłem bo sądziłem że ruszy, wszystko siedzi na Tomcat 7.
Dostaje taki błąd

org.hibernate.ejb.HibernatePersistence cannot be cast to javax.persistence.spi.PersistenceProvider

description The server encountered an internal error (org.hibernate.ejb.HibernatePersistence cannot be cast to javax.persistence.spi.PersistenceProvider) that prevented it from fulfilling this request.

exception 

java.lang.ClassCastException: org.hibernate.ejb.HibernatePersistence cannot be cast to javax.persistence.spi.PersistenceProvider
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:62)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
	jee.mw.encje.StudentDAO.<init>(StudentDAO.java:14)
	jee.mw.serwlet.index.doGet(index.java:31)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.29 logs.

 

plik persistence wygląda tak

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
	xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
	<persistence-unit name="ORM">
		<provider>org.hibernate.ejb.HibernatePersistence</provider>
		<class>jee.mw.encje.Student</class>
		
		<properties>
  	<property name="hibernate.connection.username" value="root"/>
	<property name="hibernate.connection.password" value="root"/>
	<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
	<property name="hibernate.connection.url" value="jdbc:mysql://localhost/studenci"/>
	<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
	<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
	</properties>
	</persistence-unit>
</persistence> 

na razie chche tylko nawiazac polaczenie nic wiecej robie to tak

public class StudentDAO {

	private EntityManager em;
	private static EntityManagerFactory emf; 

	public StudentDAO() {
		emf = Persistence.createEntityManagerFactory("ORM");
		em = emf.createEntityManager();
	}
	
} 

Nie wiem dlaczego nie działa. Gdzieś czytałem że jeśli chodzi o najnowsza wersje to jakiś bug był z Tomcat 7. Ale kur... jakis miesiąc temu robiłem niemal że tak samo i wszystko działało a teraz pociąć się mogę. Będę niezmiernie wdzięczny ża każdą wskazówkę, która mi pomorze to ogarnąć.

0

A możesz pokazać POMa którego tutaj masz? Bo takie dziwne błędy zwykle biorą się z tego że masz wrzucone dwie rożne wersje jakiejś biblioteki (w tym wypadku providera JPA). Jesteś pewien że nie masz wrzuconych dwóch różnych jarów z dostawcami?

0

Mam tylko starą wersję. Resztę wywaliłem i dałem nowego Tomcata.
Projekt
http://zapodaj.net/1e96d37107aca.png.html

Tomcat
http://zapodaj.net/469d8a2648df1.png.html

To co w projekcie mam na Tomcata wrzucone bo kiedyś ktoś mi poradził aby tak robić.

Coś się ruszyło.

Exception report

message No Persistence provider for EntityManager named ORM

description The server encountered an internal error that prevented it from fulfilling this request.

exception 

javax.persistence.PersistenceException: No Persistence provider for EntityManager named ORM
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)
	javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
	jee.mw.encje.StudentDAO.<init>(StudentDAO.java:15)
	jee.mw.serwlet.index.doGet(index.java:32)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:728)


note The full stack trace of the root cause is available in the Apache Tomcat/7.0.33 logs.

 

Teraz to dostaje

Zachowałem się jak Cygan. Dodałem wymagane biblioteki ale samej biblioteki do Hibernate3 nie dodałem. Zmieniły się błędy. teraz niby jest złe mapowanie samej klasy. ale to już za pare h po ogarniam bo nerwowo nie daje rady z tym.

0

Nie ogarniam. Na jednej tabeli mi chodzi a na innej wywala:/
Na tym działa

@Entity
@Table(name="osoba")
public class Osoba implements Serializable{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	private int id;
	private String imie;
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getImie() {
		return imie;
	}
	public void setImie(String imie) {
		this.imie = imie;
	}
	public Osoba() {
		super();
	}
	
	 

tak wyciagam coś z bazy List<Osoba> os = em.createQuery("SELECT r FROM Osoba r").getResultList();
to działa dostaje jakiś zwrot.
Natomiast na większej tabeli w innej bazie już nie działa
teraz mam taki obiekt

@Entity
@Table(name="STUDENT")
class Student implements Serializable{


	private static final long serialVersionUID = 1L;
	@Id
	@GeneratedValue
	@Column(name="ID")
	private int id;
	@Column(name="INDEKS")
	private int indeks;
	@Column(name="IMIE")
	private String imie;
	@Column(name="NAZWISKO")
	private String nazwisko;
	@Column(name="MIEJSCE_UR")
	private String miejsceUr;
	@Column(name="DATA_UR")
	private String dataUr;
	@Column(name="ULICA")
	private String ulica;
	@Column(name="MIEJSCOWOSC")
	private String miejscowosc;
	@Column(name="NUMER_DOMU")
	private int numerDomu;
	@Column(name="KOD_POCZTOWY")
	private String kodPocztowy;
	@Column(name="POCZTA")
	private String poczta;
	@Column(name="EMAIL")
	private String email;
	@Column(name="KIERUNEK_STUDIOW")
	private String kierunekStudiow;
	@Column(name="TELEFON")
	private String telefon;
	@Column(name="SPECJALNOSC")
	private String specjalnosc;
	
	
	
	
	public Student() {
		super();
	}

... getery setery 

wyciagam tak samo jak w przypadku działającym
List<Student> os = em.createQuery("SELECT r FROM STUDENT r").getResultList();

No i ja osobiście nie dostrzegam dlaczego tak jest:/

Edit:
Chyba znalazłem bląd tylko nie wiem dlaczego to niby przez to nie działa. Chodzi o adnotacje do nazwy kolumny. Gdy jej nie ma działa. Gdy jest sypie się że nie może dokonać mapowania.

Edit:
zapisałem tak
List<Student> os = this.em.createQuery("SELECT a FROM "+"jee.mw.encje.Student"+ " a ").getResultList();
i zadziałało. nie mam pojecia dlaczego mimo ze inny obiekt tez w tym pakiecie był i był znajdywany a tutaj takie kwiatki się dzieja

0

Nie wiem czemu akurat tak ci się dzieje, ale moja rada jest dość prosta: używaj Criteria zamiast takiego ręcznego sklejania stringów ;)

0

Już zbliżam się do kresu wytrzymałości nerwowej pod MySQL działa pod PostgreSQL już nie.

0

A bierzesz pod uwagę to że nazwy kolumn mogą być case-sensitive? Na przykład Oracle z automatu zakłada ze jesli nazwa kolumny nie jest w "" to jest pisana cała dużymi literkami...

0

Ja już takie kombinacje alpejskie zacząłem robić a i tak cholerstwo nie chce ruszyć|:/

0

jakie to jest gó*no straszne. teraz jednak namiar na taele powinien być bez nazwy pakietu. Kur... to jaki sens ma JPA skoro i tak pod każdą bazę trzeba przeróbki robić i nie działa to tak jak rzekomo miało czyli 1 konfiguracji i dalej tylko persistence.xml ewentualnie a kod miał być ciagle ten sam.

0
  1. Ponawiam propozycję - używaj Criteria
  2. Ja nigdy nie musiałem specyfikować pakietu w takiej sytuacji i zgaduje że nazwy tabel miałeś inne po prostu (np. z innym casem)
0

Zaraz wezme to ogarne od podstaw i dam znać co było problemem

0

Criteria sie nie nadaje do pisania zapytan, do tego jest SQL (swietny DSL do pobierania danych) lub JPQL / HQL. Jesli trzeba parametryzowac, to tez mozna.
Criteria sie nadaja do automatycznego generowania zapytan.

Zawsze mnie zastanawia dlaczego wiara sie upiera na criteria, ani to zwiezle ani wygodne, ani typesafe (nie powiesz mi ze np. podawanie propertisow czy calych sciezek w postaci stringa jest typesafe?) Jedynie JPA2 i jej Criteria z wygenerowanym metamodelem (Person._lastname itp.) sa bezpieczne, ale czytelnosc tego jest beznadziejna.

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