Проблема в сохранении простого объекта в Hibernate - PullRequest
0 голосов
/ 11 июня 2011

У меня есть следующий класс модели:

package com.swaranga.model;

public final class Book
{
    private Long id;
    private String title;
    private String isbn;

    public Book(){}

    public Book(String title, String isbn)
    {
        this.title = title;
        this.isbn = isbn;
    }

    public final Long getId(){
        return id;
    }

    private final void setId(Long id)
    {
        this.id = id;
    }


    public final String getTitle()
    {
        return title;
    }


    public final void setTitle(String title)
    {
        this.title = title;
    }


    public final String getIsbn()
    {
        return isbn;
    }


    public final void setIsbn(String isbn)
    {
        this.isbn = isbn;
    }
    //assume valid equals and hashcode
}

Имеется следующий файл сопоставления Book.hbm.xml:

<hibernate-mapping>

        <class name="com.swaranga.model.Book" table="book">
            <id name="id" type="long">
                <generator class="native"/>
            </id>

            <property name="title" column="title" type="string"/>

            <property name="isbn" column="isbn" type="string"/>
        </class>

</hibernate-mapping>

Следующая схема базы данных:

    CREATE TABLE  `hibernatetest`.`book` (
      `id` int(10) unsigned NOT NULL auto_increment,
      `title` varchar(45) NOT NULL,
      `isbn` varchar(45) NOT NULL,
      PRIMARY KEY  (`id`)
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;

Следующий файл конфигурации Hibernate:

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">com.mysql.jdbc.Driver </property>          
        <property name="connection.url">jdbc:mysql://localhost:3306/HibernateTest </property>

        <property name="connection.username"> root </property>

        <property name="connection.password"> latitude </property>

        <property name="show_sql">true</property>

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

        <property name="myeclipse.connection.profile">mysql</property>

        <mapping resource="com\swaranga\model\Book.hbm.xml" />
    </session-factory>
</hibernate-configuration>

И, наконец, следующий код для сохранения объекта Book:

public class Main
{
    public static void main(String[] args)
    {
        File f = new File("hibernate.cfg.xml");     
        Configuration cfg = new Configuration();
        SessionFactory sessionFactory = cfg.configure(f).buildSessionFactory();     
        Session s = sessionFactory.openSession();       
        s.beginTransaction();       
        s.save(new Book("JDBC", "ISBN_!@#"));       
        s.flush();      
        s.disconnect();
    }
}

В консоли выводится следующий вывод:

Hibernate: insert into book (title, isbn) values (?, ?)

Но когда я проверяю свою базу данных, там нет записей.

Извиняюсь за такой длинный вопрос, но я счел необходимым предоставить все детали.Пожалуйста помоги.Заранее спасибо.

Ответы [ 4 ]

3 голосов
/ 11 июня 2011

Попробуйте отредактировать конец основного метода следующим образом:

Transaction tx = s.beginTransaction();       
s.save(new Book("JDBC", "ISBN_!@#"));       
tx.commit();
s.flush();      
s.disconnect();
0 голосов
/ 11 июня 2011

Вы пробовали вводить идентификатор типа "long"?

0 голосов
/ 11 июня 2011

Вы не установили идентификатор базы данных для автоматического увеличения. Попробуй это. Должно работать.

0 голосов
/ 11 июня 2011

Является ли "auto" допустимым классом генератора?

Он не указан в части документов O / R Mapping, и, судя по всему, вы не генерируете идентификатор в коде или базе данных:

http://docs.jboss.org/hibernate/core/3.3/reference/en/html/mapping.html

Я бы посмотрел на native, если вы хотите назначить идентификаторы или создать генератор идентификаторов, чтобы MySQL справился с этим.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...