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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> JSP — с чего начать? 
V
    Опции темы
nerezus
  Дата 28.6.2007, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


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

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



Цитата

Заметил что часто требуется работадателями и много народ обсуждает hibernate.
 +1, ORM в разы упростит работу )
попробовал однажды - теперь отвращение к другим способам.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
batigoal
Дата 28.6.2007, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Есть ведь еще Java Persistence API. Я с ним сейчас пытаюсь заморачиваться. Как я понимаю, он во многом базируется (или тупо повторяет) Hibernate.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Stampede
Дата 28.6.2007, 22:22 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



Говоришь, Hibernate? Ну что ж, хороший выбор.

Попробуй сначала разобраться самостоятельно. Для двух простых таблиц, думаю, сделать самому вполне реально. Ну а если что - проси помощи клуба. В принципе тут грамотных людей хватает. Особенно хорошо будет, если tux согласится помочь.

Но сначала выложи зип.

Добавлено через 2 минуты и 3 секунды
Цитата(batigoal @  28.6.2007,  12:09 Найти цитируемый пост)
Есть ведь еще Java Persistence API.


Я его тоже посмотрел. Но для него, как я понял, нужен полновесный JEE сервер. А мы все-таки делаем обычный вебсайт.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
w1nd
Дата 28.6.2007, 22:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вертилятор
***


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

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



Цитата(Stampede @  28.6.2007,  22:22 Найти цитируемый пост)
Я его тоже посмотрел. Но для него, как я понял, нужен полновесный JEE сервер. А мы все-таки делаем обычный вебсайт.

Не обязательно, возможны (и вроде есть) легковесные реализации.


--------------------
user posted imageuser posted image
PM MAIL ICQ   Вверх
Stampede
Дата 28.6.2007, 23:32 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Гносеолог
**


Профиль
Группа: Участник Клуба
Сообщений: 963
Регистрация: 25.4.2005
Где: Calgary, Alberta, Canada

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



У JPA (Java Persistence API) есть все предпосылки стать той технологией работы с данными, которая вот уже много лет напрашивалась к реализации и которую так долго ждали разработчики. Думаю, уже в самом скором времени производители ORM-средств адаптируют свои продукты таким образом, чтобы они соответствовали JPA. А когда вслед за этим JPA включат в состав Java SE, на всей планете наступит большое щястье.

Но до этого светлого времени еще нужно дожить. Поэтому давайте пока все-таки придерживаться проверенных технологий.



--------------------
"If you want something done right, do it yourself"
По секрету: выучить английский - реально!
PM WWW   Вверх
fixxer
Дата 29.6.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

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



Хочу заметить, что JPA вполне можно использовать в Java SE. Читать здесь Для этого необходимы пакеты:
Hibernate Core, он скорее всего уже есть
Hibernate Annotations
Hibernate EntityManager

Также, если нужно, могу запостить книжку Java Persistence with Hibernate

Это сообщение отредактировал(а) fixxer - 29.6.2007, 10:28


--------------------
user posted image
PM MAIL ICQ   Вверх
diablero
Дата 29.6.2007, 20:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Подвожу вторую жЫрную черту

Присоединённый файл ( Кол-во скачиваний: 119 )
Присоединённый файл  Infinite1.0.1.2.zip 7,88 Kb


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
Entry_N3
  Дата 30.6.2007, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(Stampede @ 28.6.2007,  23:32)
У JPA (Java Persistence API) есть все предпосылки стать той технологией работы с данными, которая вот уже много лет напрашивалась к реализации и которую так долго ждали разработчики. Думаю, уже в самом скором времени производители ORM-средств адаптируют свои продукты таким образом, чтобы они соответствовали JPA. А когда вслед за этим JPA включат в состав Java SE, на всей планете наступит большое щястье.

Но до этого светлого времени еще нужно дожить. Поэтому давайте пока все-таки придерживаться проверенных технологий.

JSR 220 Java Persistence Architecture – в Java SE 7 планируется включить разработанный группой экспертов по EJB persistence API, значительно облегчающий работу с реляционными БД из объектно-ориентированного кода.
PM MAIL   Вверх
tux
Дата 1.7.2007, 15:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Цитата(Stampede @  28.6.2007,  22:22 Найти цитируемый пост)
Особенно хорошо будет, если tux согласится помочь.

tux согласится. smile
PM MAIL Skype GTalk Jabber YIM   Вверх
powerOn
Дата 1.7.2007, 18:40 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Цитата(Stampede @  28.6.2007,  23:22 Найти цитируемый пост)
Но для него, как я понял, нужен полновесный JEE сервер. А мы все-таки делаем обычный вебсайт.


Не нужен никакой контейнер. Как правильно заметил fixxer, JPA можно легко использовать в stand-alone программах. JPA - это спецификация описывающая единый интерфейс для ORM фрейвёрков. JPA описывает интерфейсы, которые должен реализовать  ORM фрейвёрк, что бы его можно было использовать в качестве провайдера данных. 
Т.е. если раньше цепочка доступа к данным шла как:
Business Logic -- ORM Framework -- Database.

то теперь она будет выглядеть так:
Business Logic -- JPA -- ORM Framework -- Database.

т.е. Business Logic для доступа к данным должна знать только интерфейс JPA, а не конкретного ORM Framework-а. Что позволяет этот самый ORM Framework легко сменить на другой, не трогая уровень бизнес логики.
В частном случае могут быть такие цепочки:
Business Logic -- JPA -- Hibernate -- Database.
Business Logic -- JPA -- TopLink -- Database.

Цитата(fixxer @  29.6.2007,  11:20 Найти цитируемый пост)
Hibernate Annotations
Hibernate EntityManager


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

Так что, ИМХО, JPA - это будущее. (И фиг его почему его ассоциируют с EJB3.0... наверное из-за аннотаций)



--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
diablero
Дата 1.7.2007, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Цитата(tux @  1.7.2007,  15:27 Найти цитируемый пост)
tux согласится.

Тогда вопросsmile

Не видет файл user.hbm.xml.
Код

try {
            Configuration conf = new Configuration();
            conf.addResource(homeDir+"/conf/user.hbm.xml");
            conf.configure(new File(homeDir+"/conf/hibernate.cfg.xml"));
            SessionFactory sessionFactory = conf.buildSessionFactory();

            Session session = sessionFactory.getCurrentSession();

            sessionFactory.close();

        } catch (Throwable ex) {
            throw new ExceptionInInitializerError(ex);
 }

Хоть так.
Код

<?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="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.url">jdbc:mysql://localhost/infinite</property>
        <property name="connection.username">root</property>
        <property name="connection.password"></property>
        ...
        <mapping resource="conf/user.hbm.xml"/>       
    </session-factory>

</hibernate-configuration>


Причем если у Configuration вызывать configure передавая в качестве параметра путь к hibernate.cfg.xml а не файл, то тоже получаем file not found




Это сообщение отредактировал(а) diablero - 2.7.2007, 00:17


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
PM MAIL   Вверх
tux
Дата 2.7.2007, 05:30 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Давай разбираться как конфигурируется Hibernate. Всю свою конфигурацию он может читать либо из файловой системы либо из ресурсов. С файловой системой, я думаю, все понятно, а вот про ресурсы тебе наверное нужно почитать. Грубо говоря, поиск ресурсов выполняется так же, как и поиск классов. То есть, если ты пытаешься прочитать ресурс "/conf/user.hbm.xml", то это означает, что у тебя в CLASSPATH должен быть каталог conf, в котором лежит файл user.hbm.xml. 

Если посмотреть в javadoc от Hibernate, то там видно, что метод addResource добавляет файл именно из ресурсов. Простейший способ решить проблему - положить файл /conf/user.hbm.xml туда, где у тебя лежат скомпилированные классы (либо если используешь, например, Eclipse, то вместе с исходниками, он сам все сделает). Если все же все-таки хочется грузить конфигурацию из файловой системы, то используй метод addFile() вместо addResource(). Еще раз замечу, что при использовании последнего путь нужно задавать относительно корня CLASSPATH. 

С использованием методов configure(String resource) и configure(File configFile) та же самая ситуация - в первом случае конфигурация грузится из ресурса, во втором - из файла, потому и такой несовпадающий результат.

Еще пара замечаний. Использование метода addResource() и наличие в hibernate.cfg.xml тэга mapping дублируют друг друга, поэтому лучше оставить что-то одно. Вместо метода getCurrentSession() лучше использовать openSession(). Первый метод предназначен для использования в серверах приложений и используется JTA для управления транзакциями. Обычно это нужно при работе нескольких приложений с одним источником данных. Метод openSession() явно открывает сессию, а не пытается получить уже существующую. Хотя в текущих версиях Hibernate в методе getCurrentSession() явно вызывается openSession() если не удалось сконфигурироавть JTA (в версиях 3.0 и ниже он просто не работал бы), лучше явно сказать, что мы открываем сессию.
PM MAIL Skype GTalk Jabber YIM   Вверх
diablero
Дата 2.7.2007, 12:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Какая-то не понятная ошибка закралась. Никак не могу User'а добавить в базу.
Код

log4j:WARN No appenders could be found for logger (org.hibernate.cfg.Environment).
log4j:WARN Please initialize the log4j system properly.
Hibernate: insert into user (id, name, password, group, avatar, birthday, gender, city, country, signature, mail, posts, dateRegistration) values (null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
Exception in thread "main" java.lang.ExceptionInInitializerError
    at ru.selfexpression.test.Test.main(Test.java:38)
    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.exception.SQLGrammarException: could not insert: [ru.selfexpression.User]
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:40)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2158)
    at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2638)
    at org.hibernate.action.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:48)
    at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:250)
    at org.hibernate.event.def.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:298)
    at org.hibernate.event.def.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:181)
    at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:107)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:187)
    at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:172)
    at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
    at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
    at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:535)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:523)
    at org.hibernate.impl.SessionImpl.save(SessionImpl.java:519)
    at ru.selfexpression.test.Test.main(Test.java:32)
    ... 5 more
Caused by: java.sql.SQLException: You have an error in your SQL syntax near 'group, avatar, birthday, gender, city, country, signature, mail, posts, dateRegi' at line 1
    at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2926)
    at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1571)
    at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1666)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2978)
    at com.mysql.jdbc.Connection.execSQL(Connection.java:2902)
    at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:933)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1162)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1079)
    at com.mysql.jdbc.PreparedStatement.executeUpdate(PreparedStatement.java:1064)
    at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:73)
    at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:33)
    ... 21 more

[code=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="ru.selfexpression">

    <class name="User" table="user">
        <id name="id" column="id">
            <generator class="native"/>
        </id>
        <property name="name" type="java.lang.String">
            <column name="name" not-null="true" sql-type="VARCHAR" />
        </property>
        <property name="password" type="java.lang.String">
            <column name="password" not-null="true" sql-type="VARCHAR" />
        </property>
        <property name="group" type="java.lang.String">
            <column name="group" not-null="true" sql-type="VARCHAR" />
        </property>
        <property name="avatar" type="java.lang.String">
            <column name="avatar" not-null="false" sql-type="VARCHAR" />
        </property>
        <property name="birthday" type="java.util.Date">
            <column name="birthday" not-null="false" sql-type="DATE" />
        </property>
        <property name="gender" type="java.lang.String">
            <column name="gender" not-null="false" sql-type="VARCHAR" />
        </property>
        <property name="city" type="java.lang.String">
            <column name="city" not-null="false" sql-type="VARCHAR" />
        </property>
        <property name="country" type="java.lan

Это сообщение отредактировал(а) diablero - 2.7.2007, 13:49
PM MAIL   Вверх
tux
Дата 3.7.2007, 04:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


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

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



Сразу замечание по базе данных. В именах полей следует избегать зарезервированных слов. В частности, 'group' используется в конструкциях group by. Похоже ошибка связана с этим. Во-первых, в hibernate.cfg.xml нужно указать диалект SQL, с которым предполагается работать. Делается это добавлением еще одной проперти в hibernate.cfg.xml:
Код

<property name="dialect">org.hibernate.dialect.MySQLDialect</property>

Если это не поможет, поменяй в базе данных имена полей 'password' и 'group' на что-то другое.

Однако, исправив эту ошибку, вероятно получим следующую. Вот посмотри на запрос, который сгенерировал Hibernate:
Цитата

insert into user (id, name, password, group, avatar, birthday, gender, city, country, signature, mail, posts, dateRegistration) values (null, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)

В поле id вставляется значение null, хотя это видимо первичный ключ и таких значений иметь не может. У тебя используется генератор native, который зависит от используемого диалекта. Явное указание диалекта позволит Hibernate определить что именно использовать. Не помню что используется в MySQL, если это будет тип sequence, то для его использования нужно будет предпринять специальные действия. Если Hibernate будет выдавать ошибки, пока можно будет поменять генератор на простейший - increment. 
PM MAIL Skype GTalk Jabber YIM   Вверх
diablero
Дата 3.7.2007, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 337
Регистрация: 3.12.2006
Где: Аркхэм

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



Изменил имена полей в базе данных и  генератор на increment.
Все заработало.


--------------------
Есть два варианта решения проблемы - реальный и фантастический. Реальный - это когда прилетят инопланетяне и все за нас сделают ...
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.1343 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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