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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с датой в Hibernate/MySQL 
:(
    Опции темы
Bulat
Дата 22.9.2006, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Что делать если подобная проблема с датой
Цитата

09:44:57,859 ERROR JDBCExceptionReporter:72 - Value '0000-00-00' can not be represented as java.sql.Date
Exception in thread "main" org.hibernate.exception.GenericJDBCException: could not execute query
    at org.hibernate.exception.SQLStateConverter.handledNonSpecificException(SQLStateConverter.java:82)
    at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:70)
    at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
    at org.hibernate.loader.Loader.doList(Loader.java:1596)
    at org.hibernate.loader.Loader.list(Loader.java:1577)
    at org.hibernate.loader.hql.QueryLoader.list(QueryLoader.java:395)
    at org.hibernate.hql.ast.QueryTranslatorImpl.list(QueryTranslatorImpl.java:271)
    at org.hibernate.impl.SessionImpl.list(SessionImpl.java:844)
    at org.hibernate.impl.QueryImpl.list(QueryImpl.java:74)
    at MailSender.Database.Test.main(Test.java:39)
    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: java.sql.SQLException: Value '0000-00-00' can not be represented as java.sql.Date
    at com.mysql.jdbc.ResultSet.getDateFromString(ResultSet.java:1913)
    at com.mysql.jdbc.ResultSet.getDate(ResultSet.java:1849)
    at com.mysql.jdbc.ResultSet.getDate(ResultSet.java:1817)
    at com.mysql.jdbc.ResultSet.getDate(ResultSet.java:1865)
    at org.hibernate.type.DateType.get(DateType.java:25)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:77)
    at org.hibernate.type.NullableType.nullSafeGet(NullableType.java:68)
    at org.hibernate.type.AbstractType.hydrate(AbstractType.java:80)
    at org.hibernate.persister.entity.BasicEntityPersister.hydrate(BasicEntityPersister.java:1690)
    at org.hibernate.loader.Loader.loadFromResultSet(Loader.java:991)
    at org.hibernate.loader.Loader.instanceNotYetLoaded(Loader.java:942)
    at org.hibernate.loader.Loader.getRow(Loader.java:855)
    at org.hibernate.loader.Loader.getRowFromResultSet(Loader.java:305)
    at org.hibernate.loader.Loader.doQuery(Loader.java:412)
    at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:218)
    at org.hibernate.loader.Loader.doList(Loader.java:1593)
    ... 11 more



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


Летатель
***


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

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



Bulat, называй темы так чтобы было понятно о чем это.

У тебя как я понимаю дата в базе хранится в виде строки? Думаю что единственный способ - получить строку и преобразовывать в дату уже после получения. Если нет, то опиши подробности, при которых это происходит.
PM MAIL Skype GTalk Jabber YIM   Вверх
batigoal
Дата 22.9.2006, 09:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Bulat @  22.9.2006,  10:04 Найти цитируемый пост)
Value '0000-00-00' can not be represented as java.sql.Date

Странный порядок, вообще говоря. Обычно же год в конце идет.


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


Летатель
***


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

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



Цитата(batigoal @  22.9.2006,  14:30 Найти цитируемый пост)
Обычно же год в конце идет. 

Ну это смотря как хранить. В старых форматах DBF если не ошибаюсь в таком виде дата и хранилась, причем как раз строкой. Но, думаю, это не тот случай.
PM MAIL Skype GTalk Jabber YIM   Вверх
Bulat
Дата 22.9.2006, 09:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(tux @  22.9.2006,  09:09 Найти цитируемый пост)
называй темы так чтобы было понятно о чем это.

Ну вообще в JDBC таких проблем не возникало, пока только с hibernate, соответственно и тема smile 

Цитата(tux @  22.9.2006,  09:09 Найти цитируемый пост)
У тебя как я понимаю дата в базе хранится в виде строки?

`contract_date` date default NULL "

Цитата(batigoal @  22.9.2006,  09:30 Найти цитируемый пост)
Странный порядок, вообще говоря. Обычно же год в конце идет. 

.......... smile ............

В принципе можешь вспомнить как я и раньше ругался на базу с которой приходится работать smile 


Цитата(tux @  22.9.2006,  09:09 Найти цитируемый пост)
Если нет, то опиши подробности, при которых это происходит.

Вообще просто хочу достать все данные из одной таблицы
таблица:
Цитата

  `user_id` mediumint(8) unsigned NOT NULL default '0',
  `record_id` smallint(5) unsigned NOT NULL default '0',
  `balance` double NOT NULL default '0',
  `limit` double NOT NULL default '0',
  `description` varchar(128) NOT NULL default '',
  `flag` smallint(5) unsigned NOT NULL default '0',
  `contract` varchar(32) default NULL,
  `contract_date` date default NULL,
  `address` varchar(64) default NULL,
  `gender` char(2) NOT NULL default 'îå',
  `person` varchar(128) NOT NULL default '',
  `charter` varchar(40) NOT NULL default '',
  `post` varchar(64) NOT NULL default '',
  `signature` varchar(64) NOT NULL default '',
  `place_id` tinyint(3) unsigned default '0',
  `operation_date` datetime default NULL,
  `operation_user` varchar(64) default NULL,
  PRIMARY KEY  (`user_id`,`record_id`)


Код

    public static void main(String[] args) throws Exception {
        // запрос
        //String Query = "FROM RecordsData r WHERE r.user_id:=name";
        String Query = "FROM RecordsData";


        // что ищем?
        Integer userId = 28309;
        //String name = args[0];
        String name = userId.toString();
        // инициализация

        Configuration cfg = new Configuration();
        cfg.configure();
        SessionFactory sf = cfg.buildSessionFactory();

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

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


        if (recordsList.size() == 0) {
            System.exit(0);
        }

        RecordsData r = (RecordsData) recordsList.get(0);

        for (int i=0; i<recordsList.size(); i++) {
            RecordsData rData = (RecordsData) recordsList.get(i);
            System.out.println("Найден электронный почтовый ящик: " + rData.getAddress());
        }

        sess.close();
    }


Может с хибернейтом не совсем верно работаю, практически еще не было возможности его почитать и что-то с ним делать

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


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


Летатель
***


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

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



Класс RecordsData и маппинг для него еще приведи, здесь вроде бы все нормально. В hibernate.cfg.xml проверь правильный ли диалект там задан - именно для MySQL? Была как-то похожая ошибка из-за неправильного диалекта.
PM MAIL Skype GTalk Jabber YIM   Вверх
Bulat
Дата 22.9.2006, 09:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



tux, 
Код

public class RecordsData {
    private Integer userId;
    private Integer recordId;
    private Double balance;
    private Double limit;
    private String description;
    private Integer flag;
    private String contract;
    private java.sql.Date contractDate;
    private String address;
    private String gender;
    private String person;
    private String charter;
    private String post;
    private String signature;
    private Integer placeId;
    private java.sql.Date operationDate;
    private String operationUser;

    public RecordsData() {

    }

    public Integer getUserId() {
        return userId;
    }

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

    public Integer getRecordId() {
        return recordId;
    }

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

    public Double getBalance() {
        return balance;
    }

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

    public Double getLimit() {
        return limit;
    }

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

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public Integer getFlag() {
        return flag;
    }

    public void setFlag(Integer flag) {
        this.flag = flag;
    }

    public String getContract() {
        return contract;
    }

    public void setContract(String contract) {
        this.contract = contract;
    }

    public java.sql.Date getContractDate() {
        return contractDate;
    }

    public void setContractDate(java.sql.Date contractDate) {
        this.contractDate = contractDate;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public String getPerson() {
        return person;
    }

    public void setPerson(String person) {
        this.person = person;
    }

    public String getCharter() {
        return charter;
    }

    public void setCharter(String charter) {
        this.charter = charter;
    }

    public String getPost() {
        return post;
    }

    public void setPost(String post) {
        this.post = post;
    }

    public String getSignature() {
        return signature;
    }

    public void setSignature(String signature) {
        this.signature = signature;
    }

    public Integer getPlaceId() {
        return placeId;
    }

    public void setPlaceId(Integer placeId) {
        this.placeId = placeId;
    }

    public java.sql.Date getOperationDate() {
        return operationDate;
    }

    public String getOperationUser() {
        return operationUser;
    }

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

    public void setOperationDate(java.sql.Date operationDate) {
        this.operationDate = operationDate;
    }

}


Код

<?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">false</property>
        <property name="use_outer_join">false</property>
        <property name="connection.username">***</property>
        <property name="connection.password">***</property>
        <property name="connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="connection.autocommit">false</property>
        <property name="connection.url">jdbc:mysql://****:****/****?lc_ctype=KOI8-R</property>

        <mapping resource ="MailSender/Database/RecordsData.hbm.xml"/>

    </session-factory>
</hibernate-configuration>


Это сообщение отредактировал(а) Bulat - 22.9.2006, 10:00


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


Летатель
***


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

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



А MailSender/Database/RecordsData.hbm.xml? smile

Добавлено @ 10:07 
Вот, кстати, у тебя почему диалект для PostgreSQL - org.hibernate.dialect.PostgreSQLDialect?

Добавлено @ 10:07 
Должен быть такой - org.hibernate.dialect.MySQLDialect.
PM MAIL Skype GTalk Jabber YIM   Вверх
Nobody
Дата 22.9.2006, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У нас была такая же проблема, лучшее решение - выкинуть mysql. Он ставит такие даты, когда в колонку, объявленную как NOT NULL пытаются вставить нулловые даты. В принципе лечится выставлением default null (Хмм, а это уже сделано). Значит явно проверять даты. Либо перевести mysql в другой режим. Для того, чтобы починить существующие даты, надо на что-нибудь изменить эти 0000-00-00 на что-нибудь содержательное.


--------------------
Алгоритм помещения вопросов на форуме
Выражаем спасибо вот ТАК
Use the Source, Luke!
PM MAIL WWW ICQ   Вверх
Bulat
Дата 22.9.2006, 11:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(tux @  22.9.2006,  10:04 Найти цитируемый пост)
MailSender/Database/RecordsData.hbm.xml?

упустил smile , счас
Код

<?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="MailSender.Database.RecordsData"
    table="Records">

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

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

        <property name="balance">
            <column name="balance" sql-type="double"
            not-null="true"/>
        </property>

        <property name="limit">
            <column name="limit" sql-type="double"
            not-null="true"/>
        </property>

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

        <property name="flag">
            <column name="flag" sql-type="int(5)"
            not-null="true"/>
        </property>

        <property name="contract">
            <column name="contract" sql-type="varchar(32)"
            not-null="false"/>
        </property>

        <property name="contractDate">
            <column name="contract_date" sql-type="datetime"
            not-null="false"/>
        </property>

        <property name="address">
            <column name="address" sql-type="varchar(64)"
            not-null="false"/>
        </property>

        <property name="gender">
            <column name="gender" sql-type="char(2)"
            not-null="true"/>
        </property>

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

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

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

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

        <property name="placeId">
            <column name="place_id" sql-type="int(3)"
            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(64)"
            not-null="true"/>
        </property>

    </class>
</hibernate-mapping>


Цитата(tux @  22.9.2006,  10:04 Найти цитируемый пост)
Вот, кстати, у тебя почему диалект для PostgreSQL - org.hibernate.dialect.PostgreSQLDialect?

Ценное замечание, пасиба smile 

Nobody, в том-то и проблема, что ничем заполнить лично я не могу, это важная информация, а те кто могут........ пока их ждать уж проще найти выход smile 


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


Летатель
***


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

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



В коде и маппингах не вижу ничего криминального. Видимо все-таки проблема в том, о чем говорит Nobody.
PM MAIL Skype GTalk Jabber YIM   Вверх
Bulat
Дата 25.9.2006, 09:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Nobody @  22.9.2006,  10:46 Найти цитируемый пост)
Либо перевести mysql в другой режим.

Имеешь в виду ALLOW_INVALID_DATES ?



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


Флудератор
****


Профиль
Группа: Экс. модератор
Сообщений: 4030
Регистрация: 19.4.2004
Где: غيليندزيك مدينة

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



А выбирать дату мускулевской ф-цией DATE_FORMAT тебе не поможет?


--------------------
Теперь при чем :P
PM   Вверх
Bulat
Дата 26.9.2006, 10:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Ignat @  26.9.2006,  09:46 Найти цитируемый пост)
А выбирать дату мускулевской ф-цией DATE_FORMAT тебе не поможет?

нет, все равно не хочет smile 


--------------------
менеджер по кодеврайтингу  smile 
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "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.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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