28 de mar. de 2007

Datas em Java - Ainda existe dúvida ?

Esse post está Deprcated! hehehe..

Tenho visto pelos fóruns e listas da vida muitas dúvidas quanto a datas em java, isso me motivou a este post.
A própria JDK já vem com ferramentas para realizar trabalhos simples com datas.
Já ouviu falar na classe Calendar ??
Classe calendar oferece algumas operações básicas com datas.

1º) Desmembrar data
Você já deve ter visto que métods da classe java.utill.Date como: getHour() , getMonth() , getYear() e muitos outros estão
Deprecated.
Que faz esse trabalho é a classe java.util.Calendar.
Pra não esquecer sempre que você cria um objeto java.util.Date ele pega por padrão a data e hora atual da máquina. A mesma coisa acontece quando se cria uma instancia de Calendar. Continuando...
Abaixo vai um exemplo de código que pega dia, mês, ano, minutos e segundos da data atual.

public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();

int dia = calendar.get(Calendar.DATE);
int mes = calendar.get(Calendar.MONTH);
int ano = calendar.get(Calendar.YEAR);

System.out.println("Dia: " + dia);
System.out.println("Mês: " + mes);
System.out.println("Ano: " + ano);
}

Atenção: o mês inicia com zero, ou seja, Janeiro = 0, fevereiro = 1, etc...
2º) Acrescentar e remover dias, mes, anos, horas, minutos...
Através do método add(), você pode acrescentar ou remover datas.
Mas como?? não existe o método remove()!!!
Para remover é só passar o int negativo, conforme exemplos:

public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.add( Calendar.DAY_OF_MONTH , 5); //adicionar 5 dias do mês
calendar.add( Calendar.HOUR , -2);//diminuir 2 horas
calendar.add( Calendar.YEAR, -18); //diminuir 18 anos

int dia = calendar.get(Calendar.DATE);
int mes = calendar.get(Calendar.MONTH);
int ano = calendar.get(Calendar.YEAR);

System.out.println("Dia: " + dia);
System.out.println("Mês: " + mes);
System.out.println("Ano: " + ano);
}

3º) Comparar datas
Outra possibilidade é saber se uma data é maior ou menor que outra.
Para isto existe o método comparTo().
Exemplo:
public static void main(String[] args) {

//eu
java.util.Date dataAtual = new java.util.Date();

java.util.Calendar calendar = java.util.Calendar.getInstance();
calendar.add(Calendar.YEAR , -18);

// ele
java.util.Date data18AnosAtras= calendar.getTime();

int result = dataAtual.compareTo( data18AnosAtras );

System.out.println(result);

}


O que eu fiz?!
Criei uma data atual com new Date(). Após removi 18 anos (
calendar.add(Calendar.YEAR , -18) ) e peguei outra data.
Depois chamei o métod compareTo() para saber se o objeto
data18AnosAtras era maior ou mernor que dataAtual.
O resultado no console foi 1. (?????)

Veja que chamei a data atual de EU e a outra data de ELE. Isso é para facilitar o entendimento.
O que o métod compareTo() faz?? ele faz a seguinte pergunta:

Eu sou maior ou menor que ele ?
Resposta: 1

-1 = "eu sou menorl"
0 = "eu sou igual"
1 = "eu sou maior"

Era isso...
Espero ter tirado algumas dúvidas.

LEMBRANDO: CRÍTICAS SEMPRE SÃO BEM VINDAS!!!

Abraço!

19 de mar. de 2007

JPA/Hibernate com Postgresql








Utilizo hibernate com postgresql há alguns anos. Uma dificuldade que sempre tive nas ferramentas para geração dos antigos XML’s e, agora, as classes anotadas é a sequence.

Nenhuma ferramenta que utilizei até hoje trouxe solução para isso.
O resultado disso é alterar o tipo do id.

Sendo assim segue exemplo do XML e de um classe anotada utilizando as sequences do postgres.

No postgres foi criada a seguinte tabela:










PESSOA

id serial

nome varchar(50)

SEQUENCE
pessoa_id_seq


Na aplicação a seguinte classe:









Exemplo do mapemento desta classe com XML:










Exemplo do mapemento com ANNOTATIONS:








No hibernate toda classe persistente deve ter o atributo id, que será utilizado para garantir a integridade dos objetos.

Esse id pode ser gerado de diversas formas, exemplo:

  • sequence
  • native
  • increment
  • identity
  • native

Para obter os detalhes desses tipos de geradores de id, acesse o site do
Hibernate

No exemplo acima utilizamos a sequence. o parâmetro generator, utilizado no XML e com Annotations identifica qual será o gerador do id que o hibernate deverá utilizar., mas para isso é necessário informar o nome da sequence que será utilizada para a respectiva classe.

Espero ter ajudado de alguma forma.

Abraço à todos!