[JPA] rozkłada mnie na łopatki

0

Próbuję stworzyć formę do logowania się przy pomoc JPA. Ale napotykam na błąd(niżej), który rozkłada mnie na łopatki. Męczę się z tym pół dnia może znajdzie się ktoś chętny i podpowie mi co robię źle. Zanim wyrwę sobie resztki włosów.

Libki:
http://h.imagehost.org/view/0798/cos1

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_2_0.xsd">
  <persistence-unit name="Users" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
    <class>entity.Users</class>
    <properties>
      <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/films"/>
      <property name="javax.persistence.jdbc.password" value="123"/>
      <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver"/>
      <property name="javax.persistence.jdbc.user" value="root"/>
    </properties>
  </persistence-unit>
</persistence>
Users.java - entity ``` /* * To change this template, choose Tools | Templates * and open the template in the editor. */

package entity;

import java.io.Serializable;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;

/**
*

  • @Author misz
    */
    @Entity
    @Table(name="users")
    public class Users implements Serializable {

    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private String id;
    @Column(name="username")
    private String username;
    @Column(name="password")
    private String password;
    @Column(name="rules")
    private String rules;

    /**

    • @return the id
      */
      public String getId() {
      return id;
      }

    /**

    • @param id the id to set
      */
      public void setId(String id) {
      this.id = id;
      }

    /**

    • @return the username
      */
      public String getUsername() {
      return username;
      }

    /**

    • @param username the username to set
      */
      public void setUsername(String username) {
      this.username = username;
      }

    /**

    • @return the password
      */
      public String getPassword() {
      return password;
      }

    /**

    • @param password the password to set
      */
      public void setPassword(String password) {
      this.password = password;
      }

    /**

    • @return the rules
      */
      public String getRules() {
      return rules;
      }

    /**

    • @param rules the rules to set
      */
      public void setRules(String rules) {
      this.rules = rules;
      }

}


private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("JavaApplication1PU");
     EntityManager em = emf.createEntityManager();

     em.getTransaction().begin();

     try {
         Query q = em.createQuery("SELECT u FROM users u WHERE rules='admin'");
         q.getResultList();

        //q.setParameter(1, 101);
        List results = q.getResultList();
            if(results.size()!=0){
                Iterator stIterator=results.iterator();
                while(stIterator.hasNext()){
                    Users u=(Users)stIterator.next();
                    System.out.print("id:"+u.getId());
                    System.out.print("sroll:"+u.getUsername());
                    System.out.print("scourse:"+u.getPassword());
                    System.out.println();
                }
        }
        else{
            System.out.println("Record not found.");
        }
    } catch (Exception e) {
        System.out.println( e.getMessage() );
        em.getTransaction().rollback();
    } finally {
        em.close();
    }

}

<b>Log:</b>

INFO: Hibernate 3.2.5
2010-06-10 1748 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
2010-06-10 1748 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
2010-06-10 1748 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
2010-06-10 1748 org.hibernate.ejb.Version <clinit>
INFO: Hibernate EntityManager 3.3.2.GA
Exception in thread "AWT-EventQueue-0" javax.persistence.PersistenceException: No Persistence provider for EntityManager named JavaApplication1PU
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:55)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:33)
at javaapplication3.Main.jButton1ActionPerformed(Main.java:94)
at javaapplication3.Main.access$000(Main.java:29)
at javaapplication3.Main$1.actionPerformed(Main.java:54)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2012)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2335)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:404)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:253)
at java.awt.Component.processMouseEvent(Component.java:6108)
at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
at java.awt.Component.processEvent(Component.java:5873)
at java.awt.Container.processEvent(Container.java:2105)
at java.awt.Component.dispatchEventImpl(Component.java:4469)
at java.awt.Container.dispatchEventImpl(Container.java:2163)
at java.awt.Component.dispatchEvent(Component.java:4295)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4461)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4125)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4055)
at java.awt.Container.dispatchEventImpl(Container.java:2149)
at java.awt.Window.dispatchEventImpl(Window.java:2478)
at java.awt.Component.dispatchEvent(Component.java:4295)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:604)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:275)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:200)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:190)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:185)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:177)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:138)
BUILD SUCCESSFUL (total time: 5 seconds)

0

wkradło byk:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("JavaApplication1PU");
a jest oczywiscie:
EntityManagerFactory emf = Persistence.createEntityManagerFactory("Users");

0

Miszczu a w persistence.xml masz ustawione <provider> na EclipseLink, a loga wkleiles od Hibernate. O co chodzi?

0

Próbowałem z różnymi ustawieniami (Eclipse JPA, Hibernate ..) w pewnym momencie log nie mówił prawdy - aczkolwiek pewnie to mój błąd.
O ile udało mi się dojść do ładu z połączeniem (TopLink, czyli powyższe przestaje być aktualne) o tyle powstał nowy problem:
An exception occured while creating a query in EntityManager
Wskazówki?

0

Podales bardzo malo informacji, na pewno wyjatek mowil wiecej. Nie podales tez ktorego providera uzywasz - TopLink? EclipseLink? Hibernate? Ale mysle ze blad jest tutaj, powinno byc:
SELECT u FROM users u WHERE u.rules='admin'
zamiast
SELECT u FROM users u WHERE rules='admin'

Zle masz ustawiony classpath - wybierz jednego providera, albo Hibernate, albo TopLink, albo EclipseLink (tego nie masz w classpath, ale masz ustawionego w persistence.xml). Ja osobiscie polecam EclipseLink dla JPA2, TopLink dla JPA1 ladnie sie spisywal, Hibernate nie znosze, ale pewnie dlatego ze za duzo z nim pracowalem. Nie wiem co to za biblioteka 'Persistence' w Twoim classpath, ale sadze ze to tylko jar z API?

0

Super! Udało mi się dojść do ładu dzięki Tobie i http://www.coderanch.com/t/468260/ORM/java/JPA-Unknown-entity-type-error!
Przed Twoim postem jak napisałem użyłem TopLink'a i JPA 1.0 - niby wszystko poszło. Aczkolwiek wywaliło mi ten przedziwny dla mnie błąd .
Po Twoim poście zdecydowałem się na EclipseLink JPA 2.0 i ten skubaniec wywalił mi piękny 'Syntax error'. I tu mi pomógł link zamieszczony powyżej. Okazało się, że 'users' w zapytaniu 'SELECT u FROM users..' odwołuje się do KLASY a nie do samej nazwy tabeli w mym przypadku winno być 'SELECT u FROM Users..''.

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