Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с Hibernate 
:(
    Опции темы
umen
Дата 19.4.2007, 10:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



Добрый день. Проблема следующая.

В данный момент изучаю Hibernate, создаю тестовое приложение, которое должно подключаться
к базе MySQL.

Код

package com.integrallis.TechConf.domain;

import java.io.*;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.Configuration;

public class Address implements Serializable {
    //static final long serialVersionUID = 213424124;
    //primary key
    private Integer id;
    //fields
    private String streetAddress;
    private String state;
    private String zipCode;
    private String city;
    private String aptNumber;

    //constructors
    public Address (){}
    
    public Integer getId() {
        return id;
    }

    public String getStreetAddress() {
        return streetAddress;
    }
    
    public String getState() {
        return state;
    }
    
    public String getZipCode() {
        return zipCode;
    }
    
    public String getCity() {
        return city;
    }
    
    public String getAptNumber() {
        return aptNumber;
    }
    
    public void setId(Integer value) {
        id = value;
    }
    
    public void setStreetAddress(String value) {
        streetAddress = value;
    }

    public void setState(String value) {
        state = value;
    }
    
    public void setZipCode(String value) {
        zipCode = value;
    }
    
    public void setCity(String value) {
        city = value;    
    }
    
    public void setAptNumber(String value) {
        aptNumber = value;
    }

    //:getters and setters
    /*Implementation of equals using Business Key Equality
    *
    *(non-Javadoc)
    *@see java.lang.Object#equals(java.lang.Object)
    */
    public boolean equals (Object object){
        //short circuits
        if (object == null) return false;
        if (this == object) return true;
        if (!(object instanceof Address)) return false;
        final Address address = (Address)object;
        //NOTE always use getters on the passed object since it
        //might be a Hibernate Proxy
        return new EqualsBuilder().
        append(streetAddress,address.getStreetAddress()).
        append(aptNumber,address.getAptNumber()).
        append(city,address.getCity()).
        append(state,address.getState()).
        append(zipCode,address.getZipCode()).
        isEquals();
    }

    public int hashCode (){
        //pick a hard-coded,randomly chosen,non-zero,odd number
        //ideally different for each class
        return new HashCodeBuilder(17,37).
        append(streetAddress).
        append(aptNumber).
        append(city).
        append(state).
        append(zipCode).
        toHashCode();
    }

    public String toString (){
        return new ToStringBuilder(this).
        append("streetAddress",streetAddress).
        append("aptNumber",aptNumber).
        append("city",city).
        append("state",state).
        append("zipCode",zipCode).
        toString();
    }

    public static void main(String []args){
        Configuration config = new Configuration().
        setProperty("hibernate.dialect","org.hibernate.dialect.MySQLDialect").
        setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver").
        setProperty("hibernate.connection.url","jdbc:mysql://localhost/tcms").
        setProperty("hibernate.connection.username","root").
        setProperty("hibernate.connection.password","").
        setProperty("hibernate.show_sql","true");
        config.addClass(Address.class);
        SessionFactory factory =config.buildSessionFactory();
        Address address =new Address();
        address.setStreetAddress("1835 73rd Ave NE");
        address.setCity("Medina");
        address.setState("WA");
        address.setZipCode("98039");
        Session session =null;
        Transaction tx =null;
        try {
            session =factory.openSession();
            tx =session.beginTransaction();
            session.persist(address);
            tx.commit();
        } catch (Exception e) {
            if (tx !=null)tx.rollback();
        } finally {
            session.close();
        }
    }



Рядом с Address.class лежит Address.hbm.xml:
Код

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">

<hibernate-mapping
    package="com.integrallis.TechConf.domain">
    <class name = "Address">
        <id name = "Id" column = "PK_ID" type = "integer">
            <generator class = "identity"/>
        </id>
        <property name = "StreetAddress"/>
        <property name = "State"/>
        <property name = "ZipCode"/>
        <property name = "City"/>
        <property name = "AptNumber"/>
    </class>
</hibernate-mapping>


Это просто тестовый класс, который маппируется на табличку, в методе main выполняется добавление в базу одной записи

При запуске программы получается следующий результат:
Код

19.04.2007 9:26:11 org.hibernate.cfg.Environment <clinit>
INFO: Hibernate 3.2.3
19.04.2007 9:26:11 org.hibernate.cfg.Environment <clinit>
INFO: hibernate.properties not found
19.04.2007 9:26:11 org.hibernate.cfg.Environment buildBytecodeProvider
INFO: Bytecode provider name : cglib
19.04.2007 9:26:11 org.hibernate.cfg.Environment <clinit>
INFO: using JDK 1.4 java.sql.Timestamp handling
19.04.2007 9:26:11 org.hibernate.cfg.Configuration addClass
INFO: Reading mappings from resource: com/integrallis/TechConf/domain/Address.hbm.xml
19.04.2007 9:26:11 org.hibernate.cfg.Configuration addResource
INFO: Reading mappings from resource: com/integrallis/TechConf/domain/Address.hbm.xml
19.04.2007 9:26:11 org.hibernate.cfg.HbmBinder bindRootPersistentClassCommonValues
INFO: Mapping class: com.integrallis.TechConf.domain.Address -> Address
19.04.2007 9:26:11 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Using Hibernate built-in connection pool (not for production use!)
19.04.2007 9:26:11 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: Hibernate connection pool size: 20
19.04.2007 9:26:11 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: autocommit mode: false
19.04.2007 9:26:12 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: using driver: com.mysql.jdbc.Driver at URL: jdbc:mysql://localhost/tcms
19.04.2007 9:26:12 org.hibernate.connection.DriverManagerConnectionProvider configure
INFO: connection properties: {user=root, password=****}
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: RDBMS: MySQL, version: 5.0.15-nt
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC driver: MySQL-AB JDBC Driver, version: mysql-connector-java-3.1.14 ( $Date: 2006-10-18 17:40:15 +0200 (Wed, 18 Oct 2006) $, $Revision: 5888 $ )
19.04.2007 9:26:12 org.hibernate.dialect.Dialect <init>
INFO: Using dialect: org.hibernate.dialect.MySQLDialect
19.04.2007 9:26:12 org.hibernate.transaction.TransactionFactoryFactory buildTransactionFactory
INFO: Using default transaction strategy (direct JDBC transactions)
19.04.2007 9:26:12 org.hibernate.transaction.TransactionManagerLookupFactory getTransactionManagerLookup
INFO: No TransactionManagerLookup configured (in JTA environment, use of read-write or transactional second-level cache is not recommended)
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic flush during beforeCompletion(): disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Automatic session close at end of transaction: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch size: 15
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC batch updates for versioned data: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Scrollable result sets: enabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JDBC3 getGeneratedKeys(): enabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Connection release mode: auto
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Maximum outer join fetch depth: 2
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default batch fetch size: 1
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Generate SQL with comments: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Order SQL updates by primary key: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory createQueryTranslatorFactory
INFO: Query translator: org.hibernate.hql.ast.ASTQueryTranslatorFactory
19.04.2007 9:26:12 org.hibernate.hql.ast.ASTQueryTranslatorFactory <init>
INFO: Using ASTQueryTranslatorFactory
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query language substitutions: {}
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: JPA-QL strict compliance: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Second-level cache: enabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Query cache: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory createCacheProvider
INFO: Cache provider: org.hibernate.cache.NoCacheProvider
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Optimize cache for minimal puts: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Structured second-level cache entries: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Echoing all SQL to stdout
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Statistics: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Deleted entity synthetic identifier rollback: disabled
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Default entity-mode: pojo
19.04.2007 9:26:12 org.hibernate.cfg.SettingsFactory buildSettings
INFO: Named query checking : enabled
19.04.2007 9:26:12 org.hibernate.impl.SessionFactoryImpl <init>
INFO: building session factory
19.04.2007 9:26:12 org.hibernate.impl.SessionFactoryObjectFactory addInstance
INFO: Not binding factory to JNDI, no JNDI name configured


Смотрю в базу - таблица address пустая, хотя должна была добавится запись.
Подскажите пожалуйста, в чём проблема?
PM MAIL   Вверх
tux
Дата 19.4.2007, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

Репутация: 74
Всего: 132



Метод session.persist() не сохраняет в базу. Вызови session.save().
PM MAIL Skype GTalk Jabber YIM   Вверх
umen
Дата 19.4.2007, 12:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



Переделал на session.save

при выполнении выскакивет exception:

Код

Exception in thread "main" java.lang.NullPointerException
    at com.integrallis.TechConf.domain.Address.main(Address.java:145)


145-я строка:
Код

session.close();


Может я неправильно к базе подключаюсь?

вот здесь я не совсем уверен:
Код

Configuration config = new Configuration().
        setProperty("hibernate.dialect","org.hibernate.dialect.MySQLDialect").
        setProperty("hibernate.connection.driver_class","com.mysql.jdbc.Driver").
        setProperty("hibernate.connection.url","jdbc:mysql://localhost/tcms").
        setProperty("hibernate.connection.username","root").
        setProperty("hibernate.connection.password","").
        setProperty("hibernate.show_sql","true");
        config.addClass(Address.class);
        SessionFactory factory =config.buildSessionFactory();


а именно:
setProperty("hibernate.connection.url","jdbc:mysql://localhost/tcms").

тут ведь tcms - это имя моей базы?
А может нужно ещё порт указывать?, например:
setProperty("hibernate.connection.url","jdbc:mysql://localhost:3306/tcms").

Правда так тоже пробовал - та же ошибка :-(

PM MAIL   Вверх
Kangaroo
Дата 19.4.2007, 16:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


AA - Aussie Animal
****


Профиль
Группа: Участник Клуба
Сообщений: 2042
Регистрация: 7.10.2006
Где: US

Репутация: 14
Всего: 104



Цитата

Может я неправильно к базе подключаюсь?

Да
Код

try {    
            session =factory.openSession();  //тут
            tx =session.beginTransaction();     //или тут летит эксепшн
            session.persist(address);    
            tx.commit();    
        } catch (Exception e) {    
            if (tx !=null)tx.rollback();    
        } finally {    
            session.close();    
        }

то есть не подключается  к базе..
config вроде в правильно задаешь..
может БД не запустил? smile 


--------------------
Lost....
PM MAIL MSN   Вверх
umen
Дата 19.4.2007, 18:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 11.11.2006

Репутация: нет
Всего: нет



В службах сервис MySQL запущен, через mesql.exe и через HeidiSQL подключаюсь нормально, значит базу запустил smile

Этот пример я взял из книги Beginning POJOs From Novice To Expert, возможно просто там криво написано.

Решил взять другой пример, из первоисточника - вместе с Hibernate поставляется пример - лежит в \hibernate-3.2\doc\tutorial
и мануал, в котором описано как работать с примером - \hibernate-3.2\doc\reference\en\pdf\hibernate_reference.pdf

В этом примере поменял в hibernate.cfg.xml строки для подключения к MySQL вместо hsqldb 

Код

<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>

    <session-factory>

        <!-- Database connection settings -->
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/test</property>
        <property name="connection.username">root</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.MySQLDialect</property>

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

        <!-- Disable the second-level cache  -->
        <property name="cache.provider_class">org.hibernate.cache.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">create</property>

        <mapping resource="events/Event.hbm.xml"/>
        <mapping resource="events/Person.hbm.xml"/>

    </session-factory>

</hibernate-configuration>


и, о чудо, всё заработало!  smile 

Теперь у меня есть работающий пример, для дальнейшего изучения Hibernate! 
Спасибо огромное за советы!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.1346 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.