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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Hibernate, xml-файл 
V
    Опции темы
Bulat
Дата 12.7.2006, 12:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



пример по hibernate

там первое поле id и в xml оно определяется так:
Код


<id name="id" type="string"
unsaved-value="null">
<column name="id" sql-type="char(32)"
not-null="true"/>
<generator class="uuid.hex"/>
</id>



У меня в базе поле userId(в базе самой как user_id), тип Integer

Пытался вместо id писать выше userId, но он ругается. Обязательно чтоли первое поле должно быть id? 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tux
Дата 13.7.2006, 02:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(Bulat @  12.7.2006,  17:54 Найти цитируемый пост)
Обязательно чтоли первое поле должно быть id?  

Конечно, не обязательно. В твоем случае должно быть так:
Код

<id name="userId" type="string" unsaved-value="null">
    <column name="user_id" sql-type="char(32)" not-null="true"/>
    <generator class="uuid.hex"/>
</id>

или, например, так:
Код

<id name="userId" column="user_id" type="java.lang.String">
    <generator class="uuid.hex"></generator>
</id>

А что именно говорит Hibernate в плане ругани? 
PM MAIL Skype GTalk Jabber YIM   Вверх
Bulat
Дата 13.7.2006, 03:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Цитата(tux @  13.7.2006,  02:00 Найти цитируемый пост)
А что именно говорит Hibernate в плане ругани?


Да нет, все понятно, сейчас это уже не важно smile 


P.S. Модераторы??? Не пойму почему моя тема перешла в J2EE, концептуально, Hibernate предназначается для работы с БД, или его кроме как в web-приложении невозможно использовать? Вроде бы я не видел такого ограничения. smile  


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tux
Дата 13.7.2006, 03:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(Bulat @  13.7.2006,  08:18 Найти цитируемый пост)
Да нет, все понятно, сейчас это уже не важно

Так а чего же спрашивал?

Цитата(Bulat @  13.7.2006,  08:18 Найти цитируемый пост)
Не пойму почему моя тема перешла в J2EE, концептуально, Hibernate предназначается для работы с БД, или его кроме как в web-приложении невозможно использовать?

Темы по Hibernate в J2EE - это традиция. smile 
PM MAIL Skype GTalk Jabber YIM   Вверх
Bulat
Дата 13.7.2006, 04:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Цитата(tux @  13.7.2006,  03:41 Найти цитируемый пост)
Так а чего же спрашивал?

Конкретно после твоего поста стало понятно smile 
 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
Bulat
Дата 13.7.2006, 07:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



Хотел бы еще уточнить один момент, так как в примере все очень стандартно. в базе у меня поля типа mediumint(8) unsigned NOT NULL default '0', так вот в xml-файле достаточно написать mediumint(8) или надо полностью? 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tux
Дата 13.7.2006, 08:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Достаточно одно типа поля, то есть mediumint(8). Но, вообще говоря, sql-type в маппинге нужно писать только если ты хочешь изменить дефолтное соответствие между типом данных Hibernate и типом данных СУБД. У меня такой необходимости ни разу не возникало, Hibernate сам разбирается smile 
PM MAIL Skype GTalk Jabber YIM   Вверх
Bulat
Дата 13.7.2006, 09:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



еще один вопрос: в примере написано

Код

import java.util.List;
import net.sf.hibernate.Hibernate;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;
import Product;


я подключил библиотеки hibernate3.jar, hibernate3-src.jar, ant-1.6.3.jar, ant-antlr-1.6.3.jar, ant-junit-1.6.3.jar, ant-launcher-1.6.3.jar, antlr-2.7.5H3.jar, ant-swing-1.6.3.jar, asm.jar, asm-attrs.jar, c3p0-0.8.5.2.jar, cglib-2.1.jar, cleanimports.jar, commons-collections-2.1.1.jar, commons-logging-1.0.4.jar, concurrent-1.3.2.jar, connector.jar, dom4j-1.6.jar, ehcache-1.1.jar, jaas.jar, jacc-1_0-fr.jar, jaxen-1.1-beta-4.jar, jboss-cache.jar, jboss-common.jar, jboss-jmx.jar, jboss-system.jar, jdbc2_0-stdext.jar, jgroups-2.2.7.jar, jta.jar, junit-3.8.1.jar, log4j-1.2.9.jar, oscache-2.1.jar, proxool-0.8.3.jar, swarmcache-1.0rc2.jar, versioncheck.jar, xerces-2.6.2.jar, xml-apis.jar - две из корневика остальные из либа, как было написано, однако он ругается на


import net.sf.hibernate.Hibernate;
import net.sf.hibernate.Session;
import net.sf.hibernate.SessionFactory;
import net.sf.hibernate.cfg.Configuration;


у меня версия 3.0 может там еще какие джары надо поключить?
  

Это сообщение отредактировал(а) Bulat - 13.7.2006, 09:40


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tux
Дата 13.7.2006, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



В версии 3.0 пакеты поменялись с net.sf.hibernate на org.hibernate. Пример у тебя видимо для 2.1 или ниже. Если поменять имена пакетов и заголовки файлов маппингов, то все должно работать (теоретически). 
PM MAIL Skype GTalk Jabber YIM   Вверх
Bulat
Дата 13.7.2006, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



tux
И еще моментик при поиске данных используется метод:

Код

Configuration cfg = new Configuration().addClass(Product.class);

SessionFactory sf = cfg.buildSessionFactory();

// открываем Session
Session sess = sf.openSession();

// поиск, результат в list
List list = sess.find(query, name, Hibernate.STRING);


А именно на метод List list = sess.find(query, name, Hibernate.STRING);

Я так понимаю тут тоже надо что-то другое использовать? 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tux
Дата 13.7.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(Bulat @  13.7.2006,  15:08 Найти цитируемый пост)
Я так понимаю тут тоже надо что-то другое использовать?  

Угу, метод find() - deprecated. Выглядеть теперь будет примерно так:
Код

List list = session.createQuery(query).setString("name", name).list();
 
PM MAIL Skype GTalk Jabber YIM   Вверх
Bulat
Дата 13.7.2006, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



tux, и давай добьем все это запросом, там значит идет такой:
select product from product in class test.hibernate.Product where product.name=:name
Вот подчеркнутое место мне не совсем понятно.... smile  


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tux
Дата 13.7.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Первый раз вижу такой синтаксис, будет время, попробую. Можно сделать проще:
Код

from test.hibernate.Product p where p.name=:name

Заметь, это полный текст запроса, select не обязателен. 
PM MAIL Skype GTalk Jabber YIM   Вверх
Bulat
Дата 13.7.2006, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


татарский Нео
***


Профиль
Группа: Завсегдатай
Сообщений: 1701
Регистрация: 22.3.2006
Где: Альметьевск

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



tux, очень сильно ругается:

структура проекта:
Код

src
    Interface
        HorseHerald
            LoginsData.java
            LoginsData.hbm.xml
        Properties
            hibernate.properties
        WorkClasses
            FindByUserId


класс контейнер:
Код

package Interface.HorseHerald;

import java.sql.Timestamp;

public class LoginsData {
    private Integer userId;
    private Integer recordId;
    private Integer loginId;
    private String name;
    private String pin;
    private String realm;
    private Double balance;
    private Double limit;
    private Integer tariffId;
    private Integer parameterId;
    private Timestamp birthDate;
    private Timestamp expirationDate;
    private Timestamp operationDate;
    private String operationUser;

    public LoginsData() {

    }

    public Integer getUserId() {
        return userId;
    }

    public Integer getRecordId() {
        return recordId;
    }

    public Integer getLoginId() {
        return loginId;
    }

    public String getName() {
        return name;
    }

    public String getPin() {
        return pin;
    }

    public String getRealm() {
        return realm;
    }

    public Double getBalance() {
        return balance;
    }

    public Double getLimit() {
        return limit;
    }

    public Integer getTariffId() {
        return tariffId;
    }

    public Integer getParameterId() {
        return parameterId;
    }

    public Timestamp getBirthDate() {
        return birthDate;
    }

    public Timestamp getExpirationDate() {
        return expirationDate;
    }

    public Timestamp getOperationDate() {
        return operationDate;
    }

    public String getOperationUser() {
        return operationUser;
    }

    public void setUserId(Integer userId) {
        this.userId = userId;
    }

    public void setRecordId(Integer recordId) {
        this.recordId = recordId;
    }

    public void setLoginId(Integer loginId) {
        this.loginId = loginId;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setPin(String pin) {
        this.pin = pin;
    }

    public void setRealm(String realm) {
        this.realm = realm;
    }

    public void setBalance(Double balance) {
        this.balance = balance;
    }

    public void setLimit(Double limit) {
        this.limit = limit;
    }

    public void setTariffId(Integer tariffId) {
        this.tariffId = tariffId;
    }

    public void setParameterId(Integer parameterId) {
        this.parameterId = parameterId;
    }

    public void setBirthDate(Timestamp birthDate) {
        this.birthDate = birthDate;
    }

    public void setExpirationDate(Timestamp expirationDate) {
        this.expirationDate = expirationDate;
    }

    public void setOperationDate(Timestamp operationDate) {
        this.operationDate = operationDate;
    }

    public void setOperationUser(String operationUser) {
        this.operationUser = operationUser;
    }
    
}


hibernate.properties: 
Код

hibernate.connection.username=//login
hibernate.connection.password=//pass
hibernate.connection.url=//host:port/db  и т.п.
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.dialect=org.hibernate.dialect.MySQLDialect


Код

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping
PUBLIC "-//Hibernate/Hibernate Mapping DTD//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
    <class name="LoginsData"
    table="Logins">

        <id name="userId" type="Integer"
            unsaved-value="null">
            <column name="user_id" sql-type="mediumint(8)"
            not-null="true"/>
            <generator class="uuid.hex"/>
        </id>

        <property name="recordId">
            <column name="record_id" sql-type="int(10)"
            not-null="true"/>
        </property>

        <property name="loginId">
            <column name="login_id" sql-type="int(10)"
            not-null="true"/>
        </property>

        <property name="name">
            <column name="name" sql-type="varchar(60)"
            not-null="true"/>
        </property>

        <property name="pin">
            <column name="pin" sql-type="varchar(16)"
            not-null="true"/>
        </property>

        <property name="realm">
            <column name="realm" sql-type="varchar(8)"
            not-null="true"/>
        </property>

        <property name="balance">
            <column name="balance" sql-type="double(16,10)"
            not-null="true"/>
        </property>

        <property name="limit">
            <column name="limit" sql-type="double(16,10)"
            not-null="true"/>
        </property>

        <property name="tariffId">
            <column name="tariff_id" sql-type="int(10)"
            not-null="true"/>
        </property>

        <property name="parameterId">
            <column name="parameter_id" sql-type="int(10)"
            not-null="true"/>
        </property>

        <property name="birthDate">
            <column name="birth_date" sql-type="datetime"
            not-null="true"/>
        </property>

        <property name="expirationDate">
            <column name="expiration_date" sql-type="datetime"
            not-null="true"/>
        </property>

        <property name="operationDate">
            <column name="operation_date" sql-type="datetime"
            not-null="true"/>
        </property>

        <property name="operationUser">
            <column name="operation_user" sql-type="varchar(32)"
            not-null="true"/>
        </property>

    </class>
</hibernate-mapping>


Код

package Interface.WorkClasses;

import java.util.List;
import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.cfg.Configuration;
import Interface.HorseHerald.LoginsData;


public class FindUserByLogin {

    public static void main(String[] args) throws Exception {
// запрос
    String query =
    "FROM test.hibernate.LoginsData p where p.user_id=:name";

// что ищем?
    Integer userId = 28308;
    //String name = args[0];
    String name = userId.toString();
// инициализация
    Configuration cfg = new Configuration().addClass(LoginsData.class);

    SessionFactory sf = cfg.buildSessionFactory();

// открываем Session
    Session sess = sf.openSession();

// поиск, результат в list
    List list = sess.createQuery(query).setString("name", name).list();

    if (list.size() == 0) {
        System.out.println("Нет юзеров с кодом " + name);
        System.exit(0);
    }

    LoginsData p = (LoginsData) list.get(0);
    sess.close();
    System.out.println("Найден юзер: " + p);
    }
}



вот что он мне пишет
Код

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Exception in thread "main" org.hibernate.MappingException: Error reading resource: Interface/HorseHerald/LoginsData.hbm.xml
    at org.hibernate.cfg.Configuration.addClass(Configuration.java:471)
    at Interface.WorkClasses.FindUserByLogin.main(FindUserByLogin.java:29)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:585)
    at com.intellij.rt.execution.application.AppMain.main(AppMain.java:86)
Caused by: org.hibernate.MappingException: class LoginsData not found while looking for property: recordId
    at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:81)
    at org.hibernate.mapping.SimpleValue.setTypeUsingReflection(SimpleValue.java:275)
    at org.hibernate.cfg.HbmBinder.createProperty(HbmBinder.java:1841)
    at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:1827)
    at org.hibernate.cfg.HbmBinder.createClassProperties(HbmBinder.java:1728)
    at org.hibernate.cfg.HbmBinder.bindRootPersistentClassCommonValues(HbmBinder.java:318)
    at org.hibernate.cfg.HbmBinder.bindRootClass(HbmBinder.java:236)
    at org.hibernate.cfg.HbmBinder.bindRoot(HbmBinder.java:152)
    at org.hibernate.cfg.Configuration.add(Configuration.java:362)
    at org.hibernate.cfg.Configuration.addInputStream(Configuration.java:400)
    at org.hibernate.cfg.Configuration.addClass(Configuration.java:468)
    ... 6 more
Caused by: java.lang.ClassNotFoundException: LoginsData
    at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
    at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:164)
    at org.hibernate.util.ReflectHelper.classForName(ReflectHelper.java:108)
    at org.hibernate.util.ReflectHelper.reflectedPropertyClass(ReflectHelper.java:77)
    ... 16 more


надо вообщем найти юзера по полю user_id(в базе) - userId(соотв. в кодах), где userId=28308 smile  smile  smile 
  

Это сообщение отредактировал(а) Bulat - 13.7.2006, 12:37


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
tux
Дата 13.7.2006, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Ну дык он файл с маппингом найти не может. Положи его (LoginsData.hbm.xml) в CLASS-PATH вместе с классом, тогда увидим следующую ошибку. smile
Вообще рекомендовал бы конфигурировать Hibernate используя hibernate.cfg.xml, это просто удобнее. Выглядеть он должен примерно так:
Код

<?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>
        <property name="dialect">org.hibernate.dialect.PostgreSQLDialect</property>
        <property name="show_sql">true</property>
        <property name="use_outer_join">false</property>
        <property name="connection.username">user</property>
        <property name="connection.password">password</property>
        <property name="connection.driver_class">org.postgresql.Driver</property>
        <property name="connection.autocommit">false</property>
        <property name="connection.url">jdbc:postgresql://localhost/database</property>

        <mapping resource="ru/esstu/entrant/orm/hibernate/AdmittanceContainer.hbm.xml"/>
        <mapping resource="ru/esstu/entrant/orm/hibernate/IdDocType.hbm.xml"/>
        <mapping resource="ru/esstu/entrant/orm/hibernate/PreliminaryExam.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

hibernate.cfg.xml надо положить в корень CLASS-PATH, hibernate.properties оттуда убрать. Ну и все маппинги должны лежать по какому-то пути в CLASS-PATH, у тебя, например, в Interface/HorseHerald.

Конфигурирование тогда совсем простое:
Код

Configuration cfg = new Configuration();
cfg.configure();
SessionFactory factory = cfg.buildSessionFactory();
 
PM MAIL Skype GTalk Jabber YIM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.1006 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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