Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java tools & IDE's > Что такое hibernate ?


Автор: Wowa 14.10.2004, 12:22
Что такое hibernate (из соседней темы biggrin.gif ) ?

Автор: Шмель 14.10.2004, 12:53
smile.gif
Hibernate - Object-Relational XML-based persistence
Позволяет проецировать классы с помощью XML на таблицы базы данных

Автор: Шмель 14.10.2004, 13:05
Пример
Это map-xml
Код
<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
   "-//Hibernate/Hibernate Mapping DTD 2.0//EN"
   "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
   <class
       name="forum.orm.Subject"
       table="subject"
       dynamic-update="false"
       dynamic-insert="false"
   >

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

       <property
           name="subjName"
           type="java.lang.String"
           update="true"
           insert="true"
           column="subj_name"
       />

       <set
           name="topics"
           lazy="false"
           inverse="false"
           cascade="all"
           sort="unsorted"
           order-by="date_time_posted"
       >

             <key
                 column="subj_id"
             />

             <one-to-many
                 class="forum.orm.Topic"
             />
       </set>

       <property
           name="description"
           type="java.lang.String"
           update="true"
           insert="true"
           column="subj_description"
       />

       <!--
           To add non XDoclet property mappings, create a file named
               hibernate-properties-Subject.xml
           containing the additional properties and place it in your merge dir.
       -->

   </class>

</hibernate-mapping>


А это то, с чем будем работать

Код

package forum.orm;

import java.io.Serializable;
import java.util.Set;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

/**
*  @hibernate.class
*   table = "subject"
*/
public class Subject implements Serializable {

   /** identifier field */
   private String id;

   /** nullable persistent field */
   private String subjName;
   
   private Set topics;
   
   private String description;

   /** full constructor */
   public Subject(String subjName) {
       this.subjName = subjName;
   }

   /** default constructor */
   public Subject() {
   }

   /**
    * @hibernate.id
    *  column = "id"
    *  generator-class = "uuid.hex"
 */
public String getId() {
       return this.id;
   }

   public void setId(String id) {
       this.id = id;
   }

   /**
    * @hibernate.property
    *  column = "subj_name"
 */
public String getSubjName() {
       return this.subjName;
   }

   public void setSubjName(String subjName) {
       this.subjName = subjName;
   }

   public String toString() {
       return new ToStringBuilder(this)
           .append("id", getId())
           .toString();
   }

   public boolean equals(Object other) {
       if ( !(other instanceof Subject) ) return false;
       Subject castOther = (Subject) other;
       return new EqualsBuilder()
           .append(this.getId(), castOther.getId())
           .isEquals();
   }

   public int hashCode() {
       return new HashCodeBuilder()
           .append(getId())
           .toHashCode();
   }

/**
 * @hibernate.set
 *  cascade = "all"
 *  order-by = "date_time_posted"
 * @hibernate.collection-key
 *  column = "subj_id"
 * @hibernate.collection-one-to-many
 *  class = "forum.orm.Topic"
 */
public Set getTopics() {
 return topics;
}

/**
 * @param set
 */
public void setTopics(Set set) {
 topics = set;
}

/**
 * @hibernate.property
 *  column = "subj_description"
 */
public String getDescription() {
 return description;
}

/**
 * @param string
 */
public void setDescription(String string) {
 description = string;
}

}


забыл добавить.
@hibernate - тэг http://xdoclet.org, после обработки которым получим map-xml по одному на каждый нужный класс

Автор: 3,14 14.10.2004, 14:09
Я например под спроектированную в PowerDesigner-е БД автоматически получаю готовую библиотеку для работы с ней, делаю экспорт базы в XML, применяю к полученному XML уже сделанный XSLT шаблон и получаю mapping для hibernate, таким образом базовая библиотека для реализации логики уже готова, и не надо никаких SQL запросов писать.

Автор: ElectricalStorm 15.10.2004, 10:43
Прикольная вещь. ;)

Автор: Wanderer2019 24.12.2004, 13:35
модет и прикольная. но ниче не понял. в каких случаях лучше "hebirnate", а в каких по запросам строить?

Автор: Nobody 26.12.2004, 17:34
Насколько я понял, hibernate - альтернатива EJB?

Автор: Sleepy_PIP 26.12.2004, 20:11
Цитата(3)
Я например под спроектированную в PowerDesigner-е БД автоматически получаю готовую библиотеку для работы с ней, делаю экспорт базы в XML, применяю к полученному XML уже сделанный XSLT шаблон и получаю mapping для hibernate, таким образом базовая библиотека для реализации логики уже готова, и не надо никаких SQL запросов писать.

в приведенном - не увидел ни одного запроса.
А потом - исскуство писаниниы SQL еще никто не отменял. И я не уверен что хибернейт знает о структуре БД что-то больше, чем разработчик ...
"экспорт базы в XML, применяю к полученному XML уже сделанный XSLT шаблон и получаю mapping для hibernate, таким образом базовая библиотека для реализации логики уже готова, и не надо никаких SQL запросов писать" - вот это и не понятно. совсем. часто для получения удобоворимого результата по времени и данным приходится варировать как источники данных, так вплодь до синтаксиса самого запроса.
Если конечно все на уровне select t1.*, t2.* from table1 t1, table2 t2 where t1.id=t2.id - то тогда я понимаю ... а если копать гораздо глубже? где выясняется что ф. лучше селекта, или серект через пару-тройку таблиц лучше прямого селекта из одной таблицы? не. не понимаю, право слово ...
Как это тогда получается?

Автор: Се ля ви 18.1.2005, 16:44
Суть hibernate в том, что она превращает реляционную БД в объектно-ориентированную. Это полная виртуализация хранения объектов - если hibernate нормально установлен и сконфигурирован, то внутри программы вы просто даёте ему объект в каком-то месте программы - и забываете о нём. Когда вам понадобилась ссылка на этот объект снова - просто запрашиваете объект у hibernate - и он вам его даёт. hibernate сам решает - класть его в БД или хранить в памяти - на основании частых или не очень вопросов к нему. Пользователя hibernate это ни коем образом не волнует - он работает только с API Hibernate. Пользователя даже вообще не должно волновать - в БД его объект, просто на винчестере сериализован, в памяти или где-то ещё - это полностью забота hibernate и определяется тем, кто его конфигурит и админит. Hibernate может и сам таблицы под любой передаваемый ему объект делать - при правильной настройке. Вот уже настройка hibernate - дело сложное...

SQL и Hibernate - это как С++ и Java - просто более высокий уровень взаимодействия ООП-Приложения с Базой Данных. Вопрос об оптимальности самого Hibernate - такой же больной, как и вопрос об оптимальности JVM. Но сам факт того, что программист не думает о том, как его объекты хранятся - сильно облегчает работу и позволяет лучше сосредоточится на бизнес-логике. :-)

Автор: jer1 25.4.2005, 09:52
Цитата

SQL и Hibernate - это как С++ и Java - просто более высокий уровень взаимодействия ООП-Приложения с Базой Данных. Вопрос об оптимальности самого Hibernate - такой же больной, как и вопрос об оптимальности JVM. Но сам факт того, что программист не думает о том, как его объекты хранятся - сильно облегчает работу и позволяет лучше сосредоточится на бизнес-логике. :-)


как Hibernate соотносится с ejb -
это другой подход?
спасибо

Автор: iskan 25.4.2005, 10:13
Нет, это не другой подход.

CMP ( Container Managed Persistence ) во многих контейнерах реализуется при помощи
той или иной ORM а сдругой стороны вы тоже можете использовать ORM для реализации
BMP (Bean Managed Persistence )

Автор: Zandr 26.4.2005, 06:38
Цитата
Я например под спроектированную в PowerDesigner-е БД автоматически получаю готовую библиотеку для работы с ней, делаю экспорт базы в XML, применяю к полученному XML уже сделанный XSLT шаблон и получаю mapping для hibernate

Кошмар. Советую внимательно посмотреть в сторону XDoclet. Добавил в JavaDoc (вы ведь документируете ваш код? ) пару атрибутов, и задание в Ant - и все, все маппинги будут создаваться автоматом.
Цитата
как Hibernate соотносится с ejb

Hibernate - это механизм сохранения состояния объектов. EJB - это наворочнный RMI (удаленный вызов процедур) с кучей наворотов (транзакции, авторизация, кластеризация, .....). Ребята из hibernate предлагают вместо CMP юзать BMP с hibernate движком.
Цитата
И я не уверен что хибернейт знает о структуре БД что-то больше, чем разработчик ...

хибернейт может знать больше разработчика о том как лучше составить запрос (могу ошибаться)
Цитата
исскуство писаниниы SQL еще никто не отменял

А никто и не запрещал самому писать запросы (на HQL или нативном SQL), если выясняется, что хибернейтовская реализация - узкое место. Вопрос в том - насколько часто возникают такие вещи и насколько разработчик может улучшить результат таким образом.

Автор: 3,14 26.4.2005, 11:45
Цитата(Zandr @ 26.4.2005, 06:38)
Кошмар. Советую внимательно посмотреть в сторону XDoclet.

Обязательно посмотрю
Цитата(Zandr @ 26.4.2005, 06:38)
Цитата
И я не уверен что хибернейт знает о структуре БД что-то больше, чем разработчик ...

хибернейт может знать больше разработчика о том как лучше составить запрос (могу ошибаться)

ИМХО он просто избавляет от рутинной низкоуровневой работы, всё же в ООП легче работать с обьектной БД


Цитата(Zandr @ 26.4.2005, 06:38)
Цитата
исскуство писаниниы SQL еще никто не отменял

А никто и не запрещал самому писать запросы (на HQL или нативном SQL), если выясняется, что хибернейтовская реализация - узкое место. Вопрос в том - насколько часто возникают такие вещи и насколько разработчик может улучшить результат таким образом.

Я всю SQL-ную часть стараюсь выкидывать на сторону БД при помощи view, думаю что не совсем правильно когда код содержит SQL запросы, от этого читаемость кода заметно понижается.

Автор: Zandr 27.4.2005, 06:06
Во многом согласен, конечно, но хранимые процедуры и вьюшки поддерживаются не всеми БД. Если нужна портируемость, то звиняйте.

Автор: Sleepy_PIP 6.6.2005, 13:10
Граждане! извините зща глупый вопрос:
А где-б нарыть как можно больше примеров по Hibernate?
в гугле смотрел - толком ничего не нашел ...
Спаибо!

Автор: Се ля ви 6.6.2005, 14:05
Цитата(Sleepy_PIP @ 6.6.2005, 13:10)
Граждане! извините зща глупый вопрос:
А где-б нарыть как можно больше примеров по Hibernate?
в гугле смотрел - толком ничего не нашел ...
Спаибо!

А на http://hibernate.ru не пробовал искать? smile

Автор: Sleepy_PIP 6.6.2005, 14:12
Цитата
Цитата(Sleepy_PIP @ 6.6.2005, 13:10)
Граждане! извините зща глупый вопрос:
А где-б нарыть как можно больше примеров по Hibernate?
в гугле смотрел - толком ничего не нашел ...
Спаибо!

А на http://hibernate.ru не пробовал искать? smile

Вах! СПАСИБО!!! smile

Автор: Се ля ви 6.6.2005, 14:56
Цитата(Sleepy_PIP @ 6.6.2005, 14:12)
Вах! СПАСИБО!!!

Пожалуйста smile Надеюсь, поможет!

P.S. Сам по нему хибернейт изучал в своё время.

Автор: LSD 6.6.2005, 20:02
Цитата(3 @ 14.10.2004, 15:09)
Я например под спроектированную в PowerDesigner-е БД автоматически получаю готовую библиотеку для работы с ней, делаю экспорт базы в XML, применяю к полученному XML уже сделанный XSLT шаблон и получаю mapping для hibernate, таким образом базовая библиотека для реализации логики уже готова, и не надо никаких SQL запросов писать.

А что за XSLT шаблон?

Автор: VDe 6.6.2005, 21:27
это именнованый шаблон как функция.

Именнованные шаблоны можно использовать в качестве функций, которые принимают на вход несколько параметров и возвращают некоторое вычисленное значение.

Автор: 3,14 7.6.2005, 08:57
Думаю что LSD имеет ввиду готовый пример, как восстановлю винч, так закину его сюда

Автор: LSD 7.6.2005, 21:08
Цитата(3)
Думаю что LSD имеет ввиду готовый пример, как восстановлю винч, так закину его сюда

Именно smile
Жду

Автор: Sleepy_PIP 8.6.2005, 11:29
не понял по поводу генераторов ...
общий вид:
<id name="id" type="long" column="uid" unsaved-value="0">
<generator class="net.sf.hibernate.id.TableHiLoGenerator">
<param name="table">uid_table</param>
<param name="column">next_hi_value_column</param>
</generator>
</id>

где и как мне сказать что я хочу использовать секвернсор (оракловый), имеющий конкретное имя, а? причем имя - со схемой ...
Спасибо!



Автор: Шмель 8.6.2005, 11:47
наверное, что нибудь типа такого:
Код

<id name="id" type="long" column="uid" unsaved-value="0">
  <generator class="sequence">
    <param name="sequence">sequence_name</param>
  </generator>
</id>


тут написано - http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-declaration-id-sequences

Автор: Sleepy_PIP 8.6.2005, 11:53
Добавлено @ 11:55
Цитата
наверное, что нибудь типа такого:
Код

<id name="id" type="long" column="uid" unsaved-value="0">
  <generator class="sequence">
    <param name="sequence">sequence_name</param>
  </generator>
</id>


тут написано - http://file:///opt/java/hibernate/doc/reference/en/html_single/index.html#mapping-declaration-id-generator

ссылка кажет на
http://file///opt/java/hibernate/doc/reference/en/html_single/index.html
и не открывается.
но доки у меня есть.
Спасибо за наставление на правильный путь!

Автор: Шмель 8.6.2005, 11:56
прошу прощения за линк smile
http://www.hibernate.org/hib_docs/reference/en/html/mapping.html#mapping-declaration-id-sequences

Автор: Sleepy_PIP 22.6.2005, 15:33
Цитата
Пример
Это map-xml
Код
<?xml version="1.0"?>

<!DOCTYPE hibernate-mapping PUBLIC
    "-//Hibernate/Hibernate Mapping DTD 2.0//EN" 
    "http://hibernate.sourceforge.net/hibernate-mapping-2.0.dtd">

<hibernate-mapping>
    <class
        name="forum.orm.Subject"
        table="subject"
        dynamic-update="false"
        dynamic-insert="false"
    >

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

        <property
            name="subjName"
            type="java.lang.String"
            update="true"
            insert="true"
            column="subj_name"
        />

        <set
            name="topics"
            lazy="false"
            inverse="false"
            cascade="all"
            sort="unsorted"
            order-by="date_time_posted"
        >

              <key
                  column="subj_id"
              />

              <one-to-many
                  class="forum.orm.Topic"
              />
        </set>

        <property
            name="description"
            type="java.lang.String"
            update="true"
            insert="true"
            column="subj_description"
        />

        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-Subject.xml
            containing the additional properties and place it in your merge dir.
        -->

    </class>

</hibernate-mapping>


А это то, с чем будем работать

Код

package forum.orm;

import java.io.Serializable;
import java.util.Set;

import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;

/**
 *  @hibernate.class
 *   table = "subject" 
 */
public class Subject implements Serializable {

    /** identifier field */
    private String id;

    /** nullable persistent field */
    private String subjName;
    
    private Set topics;
    
    private String description;

    /** full constructor */
    public Subject(String subjName) {
        this.subjName = subjName;
    }

    /** default constructor */
    public Subject() {
    }

    /**
     * @hibernate.id
     *  column = "id"
     *  generator-class = "uuid.hex"
  */
    public String getId() {
        return this.id;
    }

    public void setId(String id) {
        this.id = id;
    }

    /**
     * @hibernate.property
     *  column = "subj_name"
  */
    public String getSubjName() {
        return this.subjName;
    }

    public void setSubjName(String subjName) {
        this.subjName = subjName;
    }

    public String toString() {
        return new ToStringBuilder(this)
            .append("id", getId())
            .toString();
    }

    public boolean equals(Object other) {
        if ( !(other instanceof Subject) ) return false;
        Subject castOther = (Subject) other;
        return new EqualsBuilder()
            .append(this.getId(), castOther.getId())
            .isEquals();
    }

    public int hashCode() {
        return new HashCodeBuilder()
            .append(getId())
            .toHashCode();
    }

    /**
  * @hibernate.set 
  *  cascade = "all"
  *  order-by = "date_time_posted"
  * @hibernate.collection-key 
  *  column = "subj_id"
  * @hibernate.collection-one-to-many 
  *  class = "forum.orm.Topic"
  */
    public Set getTopics() {
  return topics;
    }

    /**
  * @param set
  */
    public void setTopics(Set set) {
  topics = set;
    }

    /**
  * @hibernate.property
  *  column = "subj_description"
  */
    public String getDescription() {
  return description;
    }

    /**
  * @param string
  */
    public void setDescription(String string) {
  description = string;
    }

}


забыл добавить.
@hibernate - тэг http://xdoclet.org, после обработки которым получим map-xml по одному на каждый нужный класс

блиин. выручай!
никак не могу заставить ant с подкл. XDoclet-ом генерить маппинг по файлу класса ...

вот что в build.xml:
....
<target name="xdoclet-hibernate" depends="clear-mappings,prepateforhibernate">
<description>
Generate Hibernate mappings
using XDoclet
</description>

<taskdef name="hibernatedoclet"
classname="xdoclet.modules.hibernate.HibernateDocletTask"
classpathref="hibernate.generation.classpath"/>

<!-- @see http://xdoclet.sourceforge.net/xdoclet/ant/xdoclet/modules/hibernate/HibernateDocletTask.html -->
<hibernatedoclet
destDir="${project.hibernate.mapping.dir}"
mergeDir="${project.hibernate.templates.dir}"
excludedtags="@version,@author,@param,@return,@throws"
force="true"
verbose="true">

<fileset dir="${src}/com/pip" includes="**/*.java">
<selector>
<contains text="@hibernate"/>
</selector>
</fileset>

<!-- Generate all the mappings -->
<hibernate
version="3.0">
</hibernate>

</hibernatedoclet>
</target>

вот что в классе:
Код

public class User
{
    private String nickName;
    private String uName;
    private String iFAM;
    private String iNAME;
    private String iOTC;
    private String eMail;
    private Date date_Create;
    private Date date_LC;
    private Set phones = new HashSet();
    private Set addreses = new HashSet();
    private boolean active;
    private long idu;

    /**
    *  @hibernate.class
    *   table = "USERS" 
    */


    /**
     * @hibernate.id  
     *      generator-class="native"
     *      column="IDU"  
    */
    public long getIdu()
    {
        return idu;
    }
  
.....



вот что при запуске Ant-а
C:\pipw\mmolo\java>ant xdoclet-hibernate
===========
Buildfile: build.xml

clear-mappings:

prepateforhibernate:

xdoclet-hibernate:
[hibernatedoclet] (XDocletMain.start 47 ) Running <hibernate/
>

BUILD SUCCESSFUL
Total time: 3 seconds

C:\pipw\mmolo\java>
===========
и _все_ в dest каталоге - пусто. ф. находит, т.к. если
сказать
<selector>
<contains text="public"/>
</selector>
имеем:
==================
Buildfile: build.xml

clear-mappings:

prepateforhibernate:

xdoclet-hibernate:
[hibernatedoclet] (XDocletMain.start 47 ) Running <hibernate/
>
[hibernatedoclet] INFO: Some classes refer to other classes that were not fou
nd among the sources or on the classpath.
[hibernatedoclet] (Perhaps the referred class doesn't exist? Hasn't bee
n generated yet?)
[hibernatedoclet] The referring classes do not import any fully qualifi
ed classes matching these classes.
[hibernatedoclet] However, since no packages are imported, xjavadoc has
assumed that the referred classes
[hibernatedoclet] belong to the same package as the referring class. Th
e classes are:
[hibernatedoclet] C:\pipw\mmolotok\java\src\com\pip\dbobjects\PoweredUser.java -
-> User qualified to com.pip.dbobjects.User
[hibernatedoclet] C:\pipw\mmolotok\java\src\com\pip\dbobjects\PoweredUser.java -
-> User qualified to com.pip.dbobjects.User

BUILD SUCCESSFUL
Total time: 3 seconds
=====================

что я не правильно делаю??
Спасибо!


Автор: Sleepy_PIP 22.6.2005, 17:38
Извините. сам разобрался ...

Автор: AntonSaburov 22.6.2005, 17:43
А поделится ? smile

Автор: Sleepy_PIP 22.6.2005, 19:05
Цитата(AntonSaburov @ 22.6.2005, 17:43)
А поделится ? smile

да, да. извините!
Привожу _рабочий_ пример

build.xml:

Код

<?xml version="1.0" encoding="UTF-8"?>
<project basedir="." default="rebuild" name="mmolotok.jpx">
  <property name="jbuilder.home" value="C:/JBuilder2005"/>
  <property name="jdk.home" value="${jbuilder.home}/jdk1.4"/>
  <property name="dest" value="classes.ant"/>
  <property name="Generated.Source" value="${dest}/Temporary_Files"/>
  <property name="hibernate.home" value="C:/hibernate-3.0/lib"/>
  <property name="Oracle.JDBC.home" value="C:/ora92/jdbc/lib"/>
  <property name="src" value="src"/>

  <property name="project.hibernate.mapping.dir" value="src/xdhbmap"/>
  <property name="project.hibernate.templates.dir" value="src/xdhbmap/tpl"/>
  <property name="project.hibernate.cfg.dir" value="src/xdhbmap"/>
  <property name="xdoclet.lib.dir" value="C:/xdoclet-1.2.3/lib"/>

<target name="xdoclet-hibernate" depends="clear-mappings,prepateforhibernate">


    <!-- Define the hibernatedoclet task -->
          <taskdef name="hibernatedoclet" 
            classname="xdoclet.modules.hibernate.HibernateDocletTask">
            <classpath>
              <fileset dir="${xdoclet.lib.dir}">
                  <include name="*.jar"/>
              </fileset>
            </classpath>
          </taskdef>

      <!-- @see http://xdoclet.sourceforge.net/xdoclet/ant/xdoclet/modules/hibernate/HibernateDocletTask.html -->
      <hibernatedoclet
        destDir="${project.hibernate.mapping.dir}"
        excludedtags="@version,@author,@param,@return,@throws"
        force="true"
        verbose="true">
    
        <fileset dir="${src}" includes="**/*.java">
          <selector>
            <contains text="@hibernate"/>
          </selector>
        </fileset>
    
        <!-- Generate all the mappings    -->
        <hibernate
          version="3.0">
        </hibernate>
    
      </hibernatedoclet>
</target>
    
    <!--  Delete all the old mappings and hibernate.cfg.xml -->
<target name="clear-mappings">
      <delete >
        <fileset dir="${project.hibernate.mapping.dir}" >
               <include name="**/*.hbm.xml"/>
        </fileset>

      </delete>

</target>
    
<target name="prepateforhibernate">
      <!-- Path for generating hibernate mappings -->
      <!-- Here, includes all the xdoclet libs which are required for mappings generation -->
      <path id="hibernate.generation.classpath">
        <fileset dir="${xdoclet.lib.dir}">
          <include name="*.jar"/>
        </fileset>
      </path>
    
      <!-- (Re)create the cfg dir to avoid "not found" errors -->
      <mkdir dir="${project.hibernate.cfg.dir}"/>
      <!-- (Re)create the mappings dir to avoid "not found" errors -->
      <mkdir dir="${project.hibernate.mapping.dir}"/>
</target>

</project>




звпуск - ant xdoclet-hibernate

ну естественно надо обратить внимание на пути.
сам проект лежит так:
/java/...
т.е. src - это .../java/src



и пример простейшего класса:
Код

package com.pip.dbobjects;


import java.io.Serializable;
import java.sql.Date;
import java.util.HashSet;
import java.util.Set;

/**
*  @hibernate.class
*   table = "USERS"
*/
public class User implements Serializable
{
    private String nickName;
    private String uName;
    private String iFAM;
    private String iNAME;
    private String iOTC;
    private String eMail;
    private Date date_Create;
    private Date date_LC;
    private Set phones = new HashSet();
    private Set addreses = new HashSet();
    private boolean active;
    private long idu;



    //=============================================================================
    public User()
    {
    }

    public void setNickName(String nickName)
    {
        this.nickName = nickName;
    }

    public void setUName(String uName)
    {
        this.uName = uName;
    }

    public void setIFAM(String iFAM)
    {
        this.iFAM = iFAM;
    }

    public void setINAME(String iNAME)
    {
        this.iNAME = iNAME;
    }

    public void setIOTC(String iOTC)
    {
        this.iOTC = iOTC;
    }

    public void setEMail(String eMail)
    {
        this.eMail = eMail;
    }

    public void setDate_Create(Date date_Create)
    {
        this.date_Create = date_Create;
    }

    public void setDate_LC(Date date_LC)
    {
        this.date_LC = date_LC;
    }

    public void setPhones(Set phones)
    {
        this.phones = phones;
    }

    public void setAddreses(Set addreses)
    {
        this.addreses = addreses;
    }

    public void setActive(boolean active)
    {
        this.active = active;
    }

    public void setIdu(long idu)
    {
        this.idu = idu;
    }

    /**
      * @hibernate.property
      *  column = "NICKNAME"
   */
    public String getNickName()
    {
        return nickName;
    }

    public String getUName()
    {
        return uName;
    }

    public String getIFAM()
    {
        return iFAM;
    }

    public String getINAME()
    {
        return iNAME;
    }

    public String getIOTC()
    {
        return iOTC;
    }

    public String getEMail()
    {
        return eMail;
    }

    public Date getDate_Create()
    {
        return date_Create;
    }

    public Date getDate_LC()
    {
        return date_LC;
    }

    public Set getPhones()
    {
        return phones;
    }

    public Set getAddreses()
    {
        return addreses;
    }

    public boolean isActive()
    {
        return active;
    }

    /**
     * @hibernate.id
     *      generator-class="native"
     *      column="IDU"
    */
    public long getIdu()
    {
        return idu;
    }
}



обратите внимание на расположение и обязательность
/**
* @hibernate.class
* table = "USERS"
*/

плюс к этому -
все
/**
* @hibernate.id
* generator-class="native"
* column="IDU"
*/
и подобные, относящиеся к каждой проперти надо ставить непоср. перед get-терами.

и вот результат:
Код

<?xml version="1.0" encoding="UTF-8"?>

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

<hibernate-mapping
>
    <class
        name="com.pip.dbobjects.User"
        table="USERS"
    >

        <id
            name="idu"
            column="IDU"
            type="long"
        >
            <generator class="native">
              <!--  
                  To add non XDoclet generator parameters, create a file named 
                  hibernate-generator-params-User.xml 
                  containing the additional parameters and place it in your merge dir. 
              --> 
            </generator>
        </id>

        <property
            name="nickName"
            type="java.lang.String"
            update="true"
            insert="true"
            column="NICKNAME"
        />

        <!--
            To add non XDoclet property mappings, create a file named
                hibernate-properties-User.xml
            containing the additional properties and place it in your merge dir.
        -->

    </class>

</hibernate-mapping>


более подробно про XDoclet'овские теги для Хибернейта читать тут:
http://xdoclet.sourceforge.net/xdoclet/tags/hibernate-tags.html

PS: важное замечание! - синклюдить данный build.xml в головной build.xml директивой <include file=... />
мне не удалось. ругается на тэг <target - даже если он пустой! так что рекомендую данный пример просто добавлять в коней своих build.xml ...

PPS: кстати у Xdoclet-оского тега @hibernate.mapping разумеется не обнаружилость свойства package - врезультате, _везде_ где есть слово class= мы вынуждены писать полное имя класса. При этом замечу - сам hibernate - отлично понимает и package и сокращенное имя класса. но увы и ах! - один не разумеет что творит другой, и все ложится на плечи разработчика smile)) ... это даже не шутка ...

Автор: Egypt 25.7.2005, 14:15
smile smile плиз пример по Хибернейту, а лучше несколько самых примитивных

Автор: batigoal 25.7.2005, 14:25
Например, тут было:
http://forum.vingrad.ru/index.php?showtopic=57659

Автор: pebehb 19.1.2006, 19:25
У меня Eclipse+Hibernate
Может кто сталкивался с необходимостью просмотреть информацию в БД через Hibernate?

Автор: pebehb 20.1.2006, 17:18
Цитата(Се ля ви @ 6.6.2005, 14:05)
Цитата(Sleepy_PIP @  6.6.2005,  13:10)
Граждане! извините зща глупый вопрос:
А где-б нарыть как можно больше примеров по Hibernate?
в гугле смотрел - толком ничего не нашел ...
Спаибо!

А на http://hibernate.ru не пробовал искать? smile

Походу hibernate.ru больше не работает, может инфорацию кто перенёс на другой сайт ?

Автор: LSD 21.1.2006, 17:07
Цитата(pebehb @ 20.1.2006, 17:18 Найти цитируемый пост)

Походу hibernate.ru больше не работает, может инфорацию кто перенёс на другой сайт ?

У меня есть копия этого сайта, сделаная около полугода назад.

http://files.vingrad.ru/LSD/doc/hibernate.rar (2,5Mb).

Автор: pebehb 23.1.2006, 16:26
Цитата(LSD @ 21.1.2006, 17:07 Найти цитируемый пост)

У меня есть копия этого сайта, сделаная около полугода назад.


Большое спасибо!!! smile

Автор: Се ля ви 24.1.2006, 18:38
И от меня Thanx.

И всё-таки интересно - что с ним сталось?.. Неужели просто отрубили - и всё?

Вообще Hibernate вроде бы JBoss перекупил (если изначально не владел) - но у них на сайте весит предложение помогать переводить доку на русский - а что, не могли проспонсировать этот сайт, что бы хотя бы просто висел? Или нынешняя версия так сильно отличается от 2.1, что эта документация вообще не годится и надо всё переводить заново?..

Автор: LSD 24.1.2006, 22:07
Да пожалуйста, это мы так скачивали, чтоб на досуге поизучать. Но документация по Hibenate достаточно скупая, а руская тем более, только как QuickStart годится.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)