[Resolvido]Gravar data atual automaticamente no banco de dados

Boa noite,

Galera estou tentando salvar a data atual do sistema no banco de dados, mas estou com dúvidas de como fazer isso.
Observações:
O meu bando de dados (Postgresql) tem uma coluna do tipo Date, estou usando Glassfish, hibernate e EJB|.
No codigo existe alguns códigos comentados, esses códigos foram alguns teste que não foram bem sucedidos.

    /* Classe Mensagem */  
    @Entity  
    @Table(name = "mensagem")  
    public class Mensagem implements Serializable {  
        private static final long serialVersionUID = 1L;  
        @Id  
        @SequenceGenerator(name = "mensagem_sequence", sequenceName = "mensagem_sequence",   
                allocationSize = 1, initialValue = 1)  
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "mensagem_sequence")  
        @Column(name = "id")  
        private Integer id;  
        @Column(name = "assunto", length=60)  
        private String assunto;  
        @Column(name = "conteudo", length=255)  
        private String conteudo;  
        @Basic(optional = false)  
        @Column(name = "data_envio")  
        @Temporal(TemporalType.TIMESTAMP)  
        private Date dataEnvio;  
        @JoinTable(name = "mensagem_destinatario", joinColumns = {  
            @JoinColumn(name = "mensagem", referencedColumnName = "id")}, inverseJoinColumns = {  
            @JoinColumn(name = "destinatario", referencedColumnName = "id")})  
        @ManyToMany  
        private List<Usuario> destinatarios;  
        @JoinColumn(name = "rementente", referencedColumnName = "id")  
        @ManyToOne(optional = false)  
        private Usuario rementente;  
      
        public Mensagem() {  
        }  
      
        public Mensagem(Integer id) {  
            this.id = id;  
        }  
      
        public Mensagem(Integer id, Date dataEnvio) {  
            this.id = id;  
            this.dataEnvio = dataEnvio;  
        }  
      
        public Integer getId() {  
            return id;  
        }  
      
        public void setId(Integer id) {  
            this.id = id;  
        }  
      
        public String getAssunto() {  
            return assunto;  
        }  
      
        public void setAssunto(String assunto) {  
            this.assunto = assunto;  
        }  
      
        public String getConteudo() {  
            return conteudo;  
        }  
      
        public void setConteudo(String conteudo) {  
            this.conteudo = conteudo;  
        }  
      
        public Date getDataEnvio() {  
            return dataEnvio;  
        }  
      
        public void setDataEnvio(Date dataEnvio) {  
            this.dataEnvio = dataEnvio;  
            setDataEnvio(new Date());  
            Date data = new Date();  
        }  
      
        public List<Usuario> getDestinatarios() {  
            return destinatarios;  
        }  
      
        public void setDestinatarios(List<Usuario> usuarioList) {  
            this.destinatarios = usuarioList;  
        }  
      
        public Usuario getRementente() {  
            return rementente;  
        }  
      
        public void setRementente(Usuario rementente) {  
            this.rementente = rementente;  
        }  
    }  
    /* Classe MensagemDAO */  
    @Stateless  
    @LocalBean  
    public class MensagemDAO implements InterfaceDAO<Mensagem>{  
          
        @PersistenceContext  
        private EntityManager em;  
      
        @Override  
        public List<Mensagem> buscarTodos() {  
            return em.createQuery("from Mensagem").getResultList();  
        }  
      
        @Override  
        public void adicionar(Mensagem objeto) {  
            em.persist(objeto);  
        }  
      
        @Override  
        public void remover(Mensagem objeto) {  
            Mensagem mensagemAExcluir = em.merge(objeto);  
            em.remove(mensagemAExcluir);  
        }  
      
        @Override  
        public void atualizar(Mensagem objeto) {  
            em.merge(objeto);  
        }  
    }  
    /* MensagemBean */  
    @ManagedBean(name = "mensagemBean")  
    @SessionScoped  
    public class MensagemBean {  
          
        private Mensagem mensagem;  
        private ListDataModel mensagens;  
          
        @EJB  
        private MensagemFachada mensagemFachada;  
          
        public MensagemBean() {  
          mensagem = new Mensagem();  
        }  
      
        public Mensagem getMensagem() {  
           return mensagem;  
        }  
          
        public void setMensagem(Mensagem mensagem) {  
            this.mensagem = mensagem;  
        }  
          
        public ListDataModel getMensagens() {  
            return mensagens;  
        }  
          
        public void setMensagens(ListDataModel mensagens) {  
            this.mensagens = mensagens;  
        }  
          
        public String excluir() {  
            mensagemFachada.excluir(this.getMensagem());  
            this.recuperarMensagens();  
            return "/mensagem/ListarMensagens";  
        }  
          
        public String listar() {  
            this.recuperarMensagens();  
            return "/mensagem/ListarMensagens";  
        }  
          
        public String inserir() {  
            try {  
                mensagemFachada.inserir(this.getMensagem());  
                this.recuperarMensagens();  
                return "/mensagem/profile";  
            } catch (Exception e) {  
                return "/mensagem/login";  
            }  
        }  
         
        private void recuperarMensagem() {  
            this.mensagem = (Mensagem) this.mensagens.getRowData();  
        }  
      
        private void recuperarMensagens() {  
            this.mensagens = new ListDataModel(mensagemFachada.listar());  
        }     
    }  
    /* MensagemFachada */  
    @Stateless  
    public class MensagemFachada{  
          
        @EJB  
        private MensagemDAO mensagemDAO;  
          
        /*public static final int MENSAGEM_ENVIADA = 1;*/  
        /*public static final int ERRO_ENVIAR_MENSAGEM = 2;*/  
          
        public void excluir(Mensagem mensagem) {  
            mensagemDAO.remover(mensagem);  
        }  
             
        public void inserir(Mensagem mensagem) {  
            mensagemDAO.adicionar(mensagem);  
        }  
          
        /*public int inserir(Usuario remetente, List<Usuario> destinatarios, String assunto, String conteudo){ 
            Mensagem msg = new Mensagem(); 
            msg.setRementente(remetente); 
            msg.setDestinatarios(destinatarios); 
            msg.setConteudo(conteudo); 
            msg.setAssunto(assunto); 
            msg.setDataEnvio(new Date()); 
            try{ 
                mensagemDAO.adicionar(msg); 
            }catch(Exception ex){ 
                return ERRO_ENVIAR_MENSAGEM; 
            } 
            return MENSAGEM_ENVIADA;   
        }*/  
          
          
        /*public void inserir(Usuario remetente, List<Usuario> destinatarios, String assunto, String conteudo){ 
            Mensagem mensagem = new Mensagem(); 
            mensagem.setRementente(remetente); 
            mensagem.setDestinatarios(destinatarios); 
            mensagem.setConteudo(conteudo); 
            mensagem.setAssunto(assunto); 
            mensagem.setDataEnvio(new java.util.Date()); 
            mensagemDAO.adicionar(mensagem); 
        }*/  
             
        public List<Mensagem> listar() {  
            return mensagemDAO.buscarTodos();  
        }  
    }  

Olá alexandergtk!

Antes de qualquer coisa, tenha certeza que você está utilizando a classe java.sql.Data (que é a indicada para serialização em banco de dados) ao invés de java.util.Data no atributo que você quer salvar no banco de dados, que no caso da sua aplicação é o private Date dataEnvio;
Com o uso desta classe, é necessário inicializar a classe com um valor long, portanto eu uso System.currentTimeMillis(), que é o valor do tipo long referente a data/hora atual do sistema.
Eu já fiz algo parecido de duas maneiras:

  1. Inicializar o atributo com uma nova instância da classe java.sql.Date, pois o atributo será instanciado ao persistirmos a classe “Mensagem” gerando a “data atual”. Ex.:
@Temporal(TemporalType.TIMESTAMP)     
private Date dataEnvio = new java.sql.Date(System.currentTimeMillis());

Com isto, não precisaria se preocupar em chamar o método setDataEnvio() ou;

  1. Chamar o método setDataEnvio() passando a instância de java.sql.Date. Ex.: setDataEnvio(new java.sql.Date(System.currentTimeMillis()));
    Com isto, mantém a codificação do atributo da forma como está.

Espero que eu tenha ajudado.
Willes

Maneiro… deu certo comigo tb!