Gravar data atual no Banco

Olá

Gostaria de saber qual seria a melhor forma (ou a mais prática) de gravar a data e hora num campo no momento em que um formulario foi gravado.

Utilizando VRaptor, gostaria que no momento em que seja clicado no “enviar” do formulário, um campo “data” já definido no banco, seja populado pela data atual. A máscara é indiferente, poderia ser YYYYMMDD.

Alguma idéia?

se for banco oracle: select sysdate from dual

Opa, falha minha, melhor eu explicar um pouco mais o contexto…

Estou utilizando MySQL.

O começo da dúvida é em qual momento será “preenchido” este campo data.

Pensei em um javascript preencher um input hidden do formulário, mas não sei exatamente se isso é possível, pois digamos que eu coloque um “value” neste “input type=“hidden””, é provável que não dê certo, porque o VRaptor necessita que o input tenha no value algo como ${cadastro.data}.
Pensei também se há alguma forma de no momento que eu chamar a classe este campo já ser preenchido pela data, em java mesmo (se tratando de “hora”, esta opção seria pouco viável).
Ou no MySQL, se no momento que todos os dados preenchidos no formulário forem enviados para o banco, o campo data seja preenchido sem ter sido enviado pelo formulário, mas sim pelo próprio banco, no momento em que os outros dados foram inseridos.

Espero que tenha ficado um pouco claro… rs

Qualquer ajuda é bem vinda.

Obrigado

jeito fácil de fazer… na entidade:

private Calendar dataCriacao = Calendar.getInstance();

e não colocar campo de data no formulario

Excelente Lucas, simples e direto, resolveu perfeitamente o problema.

Muito obrigado!

A questão da data atual está resolvida, mas minha dúvida é parecida. Se eu quiser salvar a hora atual também, para saber em que momento foi o registro, como faço isso?

mesma coisa

É verdade, eu errei em um dos tipos e não dava certo a gravação, mas agora foi tudo bem. Consegui antes da resposta, mas de toda forma muito obrigado.

Valeu!

Editei temporariamente o tópico, removendo o status de [RESOLVIDO], pelo seguinte motivo:

Digamos que o campo data que foi apresentada a solução seja o campo “data de criação”, o problema foi resolvido perfeitamente.

Mas no caso de haver também um campo “data de alteração”, em que seja armazenada a data da última alteração, não poderia ser feito na entidade, pois o importante neste campo agora é a data em que ele foi editado, e não criado.

Há alguma forma possível?

Obrigado.

[quote=lhtaconi]Editei temporariamente o tópico, removendo o status de [RESOLVIDO], pelo seguinte motivo:

Digamos que o campo data que foi apresentada a solução seja o campo “data de criação”, o problema foi resolvido perfeitamente.

Mas no caso de haver também um campo “data de alteração”, em que seja armazenada a data da última alteração, não poderia ser feito na entidade, pois o importante neste campo agora é a data em que ele foi editado, e não criado.

Há alguma forma possível?

Obrigado.[/quote]
quando fizer o update você passa a data e horário.

Connection c ... PreparedStatement ps = c.prepareStatement("update tabela set campo = ?, campo = ?, data = ? where codigo = ?"); ps.setString(1, campo); ps.setString(2, campo); ps.setDate(3, new java.sql.Date(new Date().getTime())); ps.setLong(4, codigo) ps.executeUpdate();

wbdsjunior, essa solução embora válida não seria necessariamente o que preciso.

Estou utilizando VRaptor, Hibernate, portanto, nada de SQL nos códigos da minha aplicação… hehe

O campo “data de edição” receberá a data atual quando for preenchido no momento da criação, na entidade, como o Lucas passou. Porém, quando eu chamar o método “edita” este campo deve receber a data em que foi alterado. Isso utilizando alguma solução próxima a do Lucas, sem haver necessidade de lidar diretamente com código SQL.

crie um método parecido com esse na sua entidade:

public void atualiza() {
    this.dataAlteracao = Calendar.getInstance();
}

daí é só chamar esse método no seu dao, qdo for alterar…

tenta anotá-lo com @PreUpdate, que pode ser que o hibernate chame sozinho (talvez precise fazer alguma configuração adicional)

[quote=lhtaconi]wbdsjunior, essa solução embora válida não seria necessariamente o que preciso.

Estou utilizando VRaptor, Hibernate, portanto, nada de SQL nos códigos da minha aplicação… hehe

O campo “data de edição” receberá a data atual quando for preenchido no momento da criação, na entidade, como o Lucas passou. Porém, quando eu chamar o método “edita” este campo deve receber a data em que foi alterado. Isso utilizando alguma solução próxima a do Lucas, sem haver necessidade de lidar diretamente com código SQL.[/quote]
conheço mais a JPA que Hibernante (não se você está usando a implementação JPA do Hibernante ou Hibernante puro).
na JPA há a anotação @Version que faz isso.

a @Version faz isso, mas também habilita lock otimista.

estou começando com JPA e não sei que isso significa e qual a implicação. algo a pesquisar. obrigado.