Erro ao utilizar joda DateTime
06/08/2014 10:01
0
Prezados amigos,

Estou testando o tipo joda DateTime.

Em meu Config.groovy tenho declarado:

jodatime {
fortmat.org.joda.time.pattern = "dd/MM/yyyy HH:mm"
format.org.joda.time.Date = "dd/MM/yyyy"
format.org.joda.time.DateTime = "dd/MM/yyyy HH:mm:ss"
format.org.joda.time.LocalDate = "dd/MM/yyyy"
format.org.joda.time.LocalTime = "HH:mm:ss"
format.html5 = true
}


Minha classe usa as seguintes cláusulas de import:

import org.joda.time.*
import org.joda.time.contrib.hibernate.*


E o seguinte atributo de tipo DateTime:

DateTime dataTeste


O _form .gsp tem:

<div class="fieldcontain ${hasErrors(bean: precoServicoInstance, field: 'dataTeste', 'error')} required">
<label for="dataTeste">
<g:message code="precoServico.dataTeste.label" default="Data Teste" />
<span class="required-indicator">*</span>
</label>
<joda:dateTimePicker name="dataTeste" value="${precoServicoInstance?.dataTeste}" ></joda:dateTimePicker>
</div>



A tela de entrada de dados é apresentada assim:



Porém, ao criar o registro, é lançado o seguinte erro:

URI:/easyJob/precoServico/saveClass:org.h2.jdbc.JdbcSQLExceptionMessage:Value too long for column "DATA_TESTE BINARY(255) NOT NULL": "X'aced0005737200166f72672e6a6f64612e74696d652e4461746554696d65b83c78646a5bddf90200007872001f6f72672e6a6f64612e74696d652e62617365... (277)"; SQL statement: insert into preco_servico (data_teste, instalacao_id, periodo_inicio, periodo_termino, preco_moeda, preco_valor, servico, id) values (?, ?, ?, ?, ?, ?, ?, ?) [22001-176]


Na base de dados (jdbc:h2:devDb), a coluna DATA_TESTE é do tipo VARBINARY(255)

Vocês teriam alguma ideia do que pode estar ocorrendo?

Obrigado





Tags: joda;datetime;Value too long;


0
Olá Pedro,
Nunca utilizei o joda dateTime, mas vc viu que existe um plugin para o grails?
06/08/2014 12:47


0
Por padrão o Hibernate não tem um mapeamento para o objeto do tipo DateTime, então ele irá criar por padrão um campo do tipo BLOB relacionado.

Neste caso, o ideal é usar o java.util.Date mesmo Pedro.


2
Olá amigos Dyego e Kico,

Obrigado pelo tempo de vocês. Consegui resolver a questão. Interessante: como o Hibernate não tem mapeado o tipo org.joda.time.DateTime, ele considera um VARBINARY de tamanho 255 para fazê-lo. Porém o tipo org.joda.time.DateTime tem tamanho 273, de forma que deverria ser usado VARBINARY(273) ao invés de VARBINARY(255).

A solução que utilizei foi fazer o mapeamento para a coluna da seguinte maneira:


static mapping = {
dataTeste column: "dataTeste", sqlType: "VARBINARY", length: 273,
type: PersistentDateTimeTZ {
column name: "inicio_timestamp"
column name: "inicio_zone"
}
}


Um abraço!
06/08/2014 15:48



Ainda não faz parte da comunidade???

Para se registrar, clique aqui.


Aprenda Groovy e Grails com a Formação itexto!

Newsletter Semana Groovy

Assinar

Envie seu link!


Livro de Grails


/dev/All

Os melhores blogs de TI (e em português) em um único lugar!

 
Creative Commons
RSS Grails Brasil é mantido por itexto Consultoria.
Em caso de problemas contacte Henrique Lobo Weissmann (Kico) por e-mail: kico@itexto.com.br
Todo o conteúdo presente neste site adota o Creative Commons como licença padrão.
Ver: 4.14.0
itexto