Implementando UserType do HIbernate ou estendento a org.hibernate.type.TimestampType

0 respostas
T

OLá pessoal, estamos desenvolvendo uma aplicação java + adobe flex, como todo mundo sabe trabalhar com formatação de datas no client(flex) ou javascritp e bem trabalhoso e propenso a erros. Então o pessoal aqui sugeriu que tivessemos um tipo personalizado do hibernate que resolva estas formatações, então quando tivermos um campo (tymestamp) no banco de dados, teremos um atributodo tipo string no bean (java), pra gravar no banco pegamos a string (10/10/2010) por exemplo, instanciamos uma data e salvamos no banco, quando acontece uma consulta gostaria de pegar do banco o tymestamp, formatar e mandar a string pronta pra camada de apresentação (flex).

então dei uma olhada na documentação do hibernate e tentei a seguinte implemetação…

package com.atual.datamodel.util.tipos;

import java.sql.PreparedStatement;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.text.DateFormat;

import java.text.ParseException;

import java.text.SimpleDateFormat;

import java.util.Date;

public class DataFormatada extends org.hibernate.type.TimestampType {

<a class="mention" href="/u/override">@Override</a>

public Object get(ResultSet rs, String name) throws SQLException {

DateFormat f = new SimpleDateFormat(“dd/MM/yyyy”);

return f.format(super.get(rs, name));

}

@Override
public void set(PreparedStatement st, Object value, int index) throws SQLException {

try {

super.set(st, parseDate(value.toString()), index);

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}
<a class="mention" href="/u/override">@Override</a>

public String toString(Object value) {

DateFormat f = new SimpleDateFormat(“dd/MM/yyyy”);

return f.format(value.toString());

}

/**

  • Converte uma String para um objeto java.sql.Date. Caso a String seja
  • vazia ou nula, retorna null ? para facilitar em casos onde formulários
  • podem ter campos de datas vazios.
  • @param strData
  • String no formato dd/MM/yyyy a ser formatada
  • @return java.sql.Date
  • @throws Exception
  • Caso a String esteja no formato errado
    */
    private Date parseDate(String strData) throws Exception {
    if (strData == null || strData.equals("")) {
    return null;
    }
    Date date = null;
    try {
    DateFormat f = new SimpleDateFormat(“dd/MM/yyyy”);
    date = (java.util.Date) f.parse(strData);
    } catch (ParseException e) {
    throw new Exception(“Data com formato inválido”);
    }
    return date;
    }

}

mas não tive sucesso …

o hibernate da erro…

log:

msg: java.lang.String cannot be cast to java.util.Date

to meio perdido, achei q seria simples, se alguém puder me ajudar…

também tentei criar um tipo escrevendo uma classe que implementa a interface UserType do hibernate, mas num tive sucesso…

Criado 20 de novembro de 2009
Respostas 0
Participantes 1