Hibernate dodaje dane do Hsqldb ale nie można ich potem wyciągnąć z bazy

0

Witam. Uczę się obsługi Hibernate. Po wielu trudach niby udało się dodać coś do bazy (Hsqldb) ale jak robię SELECT * to wywala mi dziwny błąd: Error code -5501, SQL state 42501: user lacks privilege or object not found: USERS

Mam beana Users.java

@Entity

public class Users implements Serializable {
    @Id
    private int userId;
    private String userName;
//dalej są gettery i settery...

plik hibernate.cfg.xml wygląda tak:

<?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="connection.driver_class">org.hsqldb.jdbc.JDBCDriver</property>
        <property name="connection.url">jdbc:hsqldb:localhost</property>
        <property name="connection.username">SA</property>
        <property name="connection.password"></property>

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

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

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

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

        <!-- Drop and re-create the database schema on startup -->
        <property name="hbm2ddl.auto">update</property>

        <!-- Names the annotated entity class -->
        <mapping class="bean.Users"/>

    </session-factory>

</hibernate-configuration>

Do tego plik z metodą main:

package hibernate_app;

import bean.Users;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;

public class Hibernate_app {

    public static void main(String[] args) {
        Users nowy = new Users();
        nowy.setUserId(1);
        nowy.setUserName("pierwszy");
        
        SessionFactory sessionfactory = new Configuration().configure().buildSessionFactory();
        Session session = sessionfactory.openSession();
        session.beginTransaction();
        session.save(nowy);
        session.getTransaction().commit();
    }
}

Po uruchomieniu dostaję coś takiego:

run:
2013-01-02 16:06:30 org.hibernate.annotations.common.Version <clinit>
INFO: HCANN000001: Hibernate Commons Annotations {4.0.1.Final}
2013-01-02 16:06:30 org.hibernate.Version logVersion
INFO: HHH000412: Hibernate Core {4.1.9.Final}
2013-01-02 16:06:30 org.hibernate.cfg.Environment <clinit>
INFO: HHH000206: hibernate.properties not found
2013-01-02 16:06:30 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: HHH000021: Bytecode provider name : javassist
2013-01-02 16:06:30 org.hibernate.cfg.Configuration configure
INFO: HHH000043: Configuring from resource: /hibernate.cfg.xml
2013-01-02 16:06:30 org.hibernate.cfg.Configuration getConfigurationInputStream
INFO: HHH000040: Configuration resource: /hibernate.cfg.xml
2013-01-02 16:06:30 org.hibernate.cfg.Configuration doConfigure
INFO: HHH000041: Configured SessionFactory: null
2013-01-02 16:06:31 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000402: Using Hibernate built-in connection pool (not for production use!)
2013-01-02 16:06:31 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000115: Hibernate connection pool size: 1
2013-01-02 16:06:31 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000006: Autocommit mode: false
2013-01-02 16:06:31 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000401: using driver [org.hsqldb.jdbc.JDBCDriver] at URL [jdbc:hsqldb:localhost]
2013-01-02 16:06:31 org.hibernate.service.jdbc.connections.internal.DriverManagerConnectionProviderImpl configure
INFO: HHH000046: Connection properties: {user=SA, password=****}
Hibernate: insert into Users (userName, userId) values (?, ?)
BUILD SUCCESSFUL (total time: 2 seconds)

Nie rozumiem dlaczego przy wykonaniu SELECT * FROM Users; wywala tamtem dziwny błąd... Łączę się oczywiście z tą samą bazą co w programie czyli jdbclocalhost
Wie ktoś coś na ten temat?

0

Jeszcze chciałem dodać, że sama baza działa normalnie bo jak się do niej łączę "ręcznie" to mogę stworzyć tabelę, zrobić inserta i selecta. Tylko nie widać tabeli utworzonej przez hibernate. Dlaczego? :(

0

A jak zrobisz zapytanie HQL tak : " Select u from Users u"

        Session session = SESSION_FACTORY.openSession();
        Transaction tx = session.beginTransaction();

        Query query = session.createQuery("Select u from Users u");

        Iterator users= query.iterate();
        while (users.hasNext()) {
            Users o = (Users) users.next();
            System.out.println(o.getImie() + " " + o.getNazwisko());
        }
        tx.commit();
        session.close();

 
0

dodałem coś takiego po insercie

Transaction tx = session.beginTransaction();
        Query query = session.createQuery("Select u from Users u");
        Iterator users= query.iterate();
        while (users.hasNext()) {
            Users o = (Users) users.next();
            System.out.println(o.getUserId() + " " + o.getUserName());
        }
        tx.commit();
        session.close();

Za każdym razem zmieniałem id usera przy insertach, żeby nie wywalało błędów (PK) czyli zacząłem od 1 potem 2 itd
Nie wiem dlaczego ale ten kod wypisuje tylko pierwszego i ostatniego usera

Hibernate: insert into Users (userName, userId) values (?, ?)
Hibernate: select users0_.userId as col_0_0_ from Users users0_
Hibernate: select users0_.userId as userId0_0_, users0_.userName as userName0_0_ from Users users0_ where users0_.userId=?
1 pierwszy
4 pierwszy
BUILD SUCCESSFUL (total time: 2 seconds)

Tak jak widać pominęło id=2 i 3. Mniejsza z tym, wcześniej oglądałem jakiegoś tutoriala do hibernate w którym ktoś używał postgresql. Po włączeniu jakiegoś menedżera z gui do przeglądania bazy, można było normalnie zobaczyć dodane wartości. Zmieniłem tylko bazę z postgresql na hsql... Dlaczego nie mogę zrobić normalnego selecta i zobaczyć co jest w tabeli Users?

0

Nie mam już do tego siły. Teraz zauważyłem, że w hibernate.cfg.xml tam gdzie wpisałem serwer można wpisać 'jdbcsfvewahjfvhewvihfeqwcbowuejcqjqjbqc' a wszystko w konsoli wygląda tak samo jak wcześniej... Oczywiście tabela w ogóle nie jest tworzona. O co tu chodzi?

0

Problem rozwiązany. Trzeba było uruchomić serwer no i miałem błąd w hibernate.cfg.xml, cały adres powinien wyglądać tak jdbchsql://localhost

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