Hibernate w JPA nie startuje.

0

Nie chce mi odpalić apka. Wszystkie jest testowe i brzydko napisane chodzi tylko aby sie odpaliło.

persistence.xml

<?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="hib">
	<provider>org.hibernate.ejb.HibernatePersistence</provider>
	<class>Osoba</class>

	<properties>
	<property name="hibernate.connection.username" value="postgres"/>
	<property name="hibernate.connection.password" value="********"/>
	<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
	<property name="hibernate.connection.url" value="jdbc:postgresql://localhost/testowa"/>
	<property name="hibernate.cache.provider_class" value="org.hibernate.cache.NoCacheProvider"/>
	<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
	
	 
	</properties>
	</persistence-unit>
</persistence>
 

Serwlet który ma to odpalić

 @WebServlet("/index")
public class index extends HttpServlet {
	private static final long serialVersionUID = 1L;
	private static EntityManagerFactory emf;
	EntityManager em;

	public index() {
		super();
		// TODO Auto-generated constructor stub
	}

	protected void doGet(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		emf = Persistence.createEntityManagerFactory("hib");
		em = emf.createEntityManager();
		

	}

	protected void doPost(HttpServletRequest request,
			HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

Wiem wiem w servlecie nie powinno byc danych ale to tylko test.

Encja

@Entity
@Table(name="osoba")
public class Osoba{
	
	@Id
	@GeneratedValue
	int id;
	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;
	}
	

	
}
 

widok projektu
http://zapodaj.net/63bd3d4eac16b.png.html

0

Co to dla Ciebie znaczy 'nie chce się odpalić'?

0

a sorki zapomniałem.
Otrzymuję taki zwrot. Do projektu JPA dodaje sobie z Project Facets

SEVERE: Servlet.service() for servlet [index] in context with path [/hib] threw exception
javax.persistence.PersistenceException: [PersistenceUnit: hib] Unable to build EntityManagerFactory
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:915)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:890)
	at org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(HibernatePersistence.java:57)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:63)
	at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)
	at index.doGet(index.java:24)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)
Caused by: org.hibernate.service.classloading.spi.ClassLoadingException: Specified JDBC Driver org.postgresql.Driver class not found
	at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:107)
	at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
	at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.buildJdbcConnectionAccess(JdbcServicesImpl.java:223)
	at org.hibernate.engine.jdbc.internal.JdbcServicesImpl.configure(JdbcServicesImpl.java:89)
	at org.hibernate.service.internal.StandardServiceRegistryImpl.configureService(StandardServiceRegistryImpl.java:75)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.initializeService(AbstractServiceRegistryImpl.java:159)
	at org.hibernate.service.internal.AbstractServiceRegistryImpl.getService(AbstractServiceRegistryImpl.java:131)
	at org.hibernate.cfg.SettingsFactory.buildSettings(SettingsFactory.java:77)
	at org.hibernate.cfg.Configuration.buildSettingsInternal(Configuration.java:2283)
	at org.hibernate.cfg.Configuration.buildSettings(Configuration.java:2279)
	at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1748)
	at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:94)
	at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:905)
	... 23 more
Caused by: org.hibernate.service.classloading.spi.ClassLoadingException: Unable to load class [org.postgresql.Driver]
	at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:141)
	at org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl.configure(DriverManagerConnectionProviderImpl.java:104)
	... 37 more
Caused by: java.lang.ClassNotFoundException: Could not load requested class : org.postgresql.Driver
	at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl$1.findClass(ClassLoaderServiceImpl.java:99)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Unknown Source)
	at org.hibernate.service.classloading.internal.ClassLoaderServiceImpl.classForName(ClassLoaderServiceImpl.java:138)
	... 38 more
2012-11-05 20:00:54 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl stop
INFO: HHH000030: Cleaning up connection pool [null]
 
0

Na Tomcata to wrzucam tzn projekt.
Wydaje mi się że pies pogrzebany jest w tym pliku
persistence.xml
bo im dłużej się mu przyglądam tym mam więcej wątpliwości. Jednak nie wiem co i jak poprawić.

0

tak i nie. Wydaje mi się, że masz ten problem co ja miałem jakiś rok temu.
Brakuje Ci po stronie Tomcata drivera i konfiguracji do niego. Wydaje się, że ten stacktrace dotyczy już samego tomcat-a, a jar z driverem, który posiadasz w swoim projekcie nie jest brany pod uwagę.
Ja bym to załatwił tak:

  1. Wgrałbym do tomcata jara - postgres....jar - to musisz wygooglać gdzie dokładnie (w jboss 7 jest to lokalizacja - modules\com)
  2. Tomcat powinien mieć jakiś plik konfiguracyjny (odpowiednik standalone.xml w Jboss), w którym dodasz coś w podobnego co ja dodałem w jboss-ie
<datasource jta="true" jndi-name="java:/jdbc/moje_jndi" pool-name="OracleDS" enabled="true" use-java-context="true" use-ccm="true">
                    <connection-url>jdbc:oracle:thin:@adres_ip:1521:xe</connection-url>
                    <driver>oracle</driver>
                    <security>
                        <user-name>username</user-name>
                        <password>pass</password>
                    </security>
                </datasource>

czyli dodajesz konfigurację połączenia do bazy
Oraz

 
   <driver name="oracle" module="com.oracle.db">
     <xa-datasource-class>oracle.jdbc.xa.client.OracleXADataSource</xa-datasource-class>
  </driver>

definiujesz driver

  1. no i w końcu persistance.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.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_1_0.xsd">
  <persistence-unit name="mojeJPA" transaction-type="RESOURCE_LOCAL">
 	<provider>org.hibernate.ejb.HibernatePersistence</provider>
 	
 	<jta-data-source>java:/jdbc/moje_jndi</jta-data-source>
 
 	<!-- list of mapping objects -->
	<class>Class1</class>
    <properties>
       <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
	   <property name="hibernate.show_sql" value="true" />
	   <property name="hibernate.format_sql" value="false" />
	   <property name="hibernate.use_sql_comments" value="true" />
	   <property name="hibernate.connection.release_mode" value="after_statement" />
    </properties>
  </persistence-unit>
</persistence>

ja tak rozwiązałem podobny problem. Niestety nigdy nie pracowałem z tomcatem i po prostu go nie znam,ale poszukaj czegoś podobnego dla posgress-a i tomcat-a. Mam nadzieję, że choć trochę naprowadzi Cię to na rozwiązanie. Daj znać jak to rozwiązałeś. pzdr

0

Biblioteka JDBC Postgresq leży u Ciebie gdzieś na dysku C. Możliwe, że Tomcat nie odnajduje jej tam, przenieś ją do katalogu WEB-INF/lib

0

po wgraniu sterownika jdbc na Tomcata wygląda jakby się coś ruszyło. Fakt błędy idą nadal aż miło ale teraz chyba już sa z tego cze coś sama baza i encja jest źle a ja sam źle wykonuje operacje na niej.

0

Wali błędami przy operacji w mojej opini wykonywanej poprawnie

SEVERE: Servlet.service() for servlet [index] in context with path [/hib] threw exception
java.lang.IllegalArgumentException: Named query not found: Select * from osoba
	at org.hibernate.ejb.AbstractEntityManagerImpl.createNamedQuery(AbstractEntityManagerImpl.java:601)
	at index.doGet(index.java:27)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1001)
	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

chce pobrać bazy testowa tabeli osoba wszystko. Czyli id i imie. w bazie id jest typu integer i jest not null a imie text
tak to robię:

emf = Persistence.createEntityManagerFactory("hib");
		em = emf.createEntityManager();
		List<Osoba> os = this.em.createNamedQuery("Select * from osoba").getResultList(); 
0

ale tu to trochę przesadziłęś to sie robi tak:
http://www.java2s.com/Code/Java/JPA/CreateNamedQueryWithEntity.htm

0

Wiecie może jak wykorzystać JPA(Hibernate) + Postgres aby działo @GenerateValue w id w encji?
Bo jakąś tablicę sekwencji muszę dodać ale jak dodaje to w adnotacji to nie ma zmian. Podpinając pod MySQL z samym @GenerateValue oczywiście nie ma problemów. A Postgres i Oracle jako klucza używają jakiejś tablicy sekwencji i nie bardzo wiem jak ugryźć ten fakt.

0

ja korzystam z @GeneratedValue(strategy = GenerationType.IDENTITY) a po stronie Postgresa wykorzystuję type Serial jako klucz (czyli integer właśnie z sekwencją)

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