Java tutorial
/* * Copyright (C) 2009 * * Jaindson Valentim Santana (jaindsonvs [at] gmail [dot] com) * Matheus Gaudencio do Rgo (matheusgr [at] gmail [dot] com) * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or any later version. * You may obtain a copy of the License at * * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ package com.google.code.mymon3y.model; import java.util.HashSet; import java.util.Set; import javax.persistence.CascadeType; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.JoinColumn; import javax.persistence.ManyToOne; import javax.persistence.NamedQueries; import javax.persistence.NamedQuery; import javax.persistence.OneToMany; import javax.persistence.Table; import javax.persistence.Transient; import javax.persistence.UniqueConstraint; import org.hibernate.annotations.Cascade; import org.hibernate.annotations.ForeignKey; import org.hibernate.validator.NotEmpty; import org.hibernate.validator.NotNull; import org.apache.commons.lang.builder.ToStringStyle; import org.apache.commons.lang.builder.ToStringBuilder; /** * Entidade que representa uma Categoria. As transaes podem ser classificadas numa Categoria. Uma Categoria pode ter * vrias Transaes associadas com ela. * * @author Jaindson Valentim Santana * @author Matheus Gaudencio do Rgo * */ @Entity @Table(name = "tb_categoria", uniqueConstraints = { @UniqueConstraint(columnNames = { "nome", "fk_usuario" }) }) @NamedQueries({ @NamedQuery(name = "categoria.nomeCategoriaLoginDoUsuario", query = "select c from Categoria c join c.usuario u where lower(c.nome) = lower(:nome) and u.login like :loginDoUsuario"), @NamedQuery(name = "categorias.nomeCategoriaLoginDoUsuario", query = "select c from Categoria c join c.usuario u where lower(c.nome) like lower(:nome) and u.login like :loginDoUsuario") }) public class Categoria implements Identificavel { /** * Verso da classe. */ @Transient private static final long serialVersionUID = 1L; /** * Identificador nico da entidade. */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; /** * Nome da Categoria. */ @NotNull(message = "Nome invlido.") @NotEmpty(message = "Nome invlido.") @Column(nullable = false) private String nome; /** * Usurio dono da Categoria. */ @ManyToOne @ForeignKey(name = "fk_usuario_constraint") @JoinColumn(name = "fk_usuario", nullable = false) private Usuario usuario; /** * Transaes associadas com esta Categoria. */ @OneToMany(cascade = { CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH }, fetch = FetchType.EAGER, mappedBy = "categoria") @Cascade({ org.hibernate.annotations.CascadeType.SAVE_UPDATE }) private Set<Transacao> transacoes; /** * Construtor vazio. */ public Categoria() { super(); this.transacoes = new HashSet<Transacao>(); } /** * Construtor que recebe o usurio dono da Categoria e o nome da Categoria. * * @param usuario * Usurio dono da Categoria. * @param nome * Nome da Categoria. */ public Categoria(Usuario usuario, String nome) { this(); this.usuario = usuario; this.nome = nome; } /** * Construtor que recebe o nome da Categoria. * * @param nome * Nome da Categoria. */ public Categoria(String nome) { this(null, nome); } /** * @see com.google.code.mymon3y.model.Identificavel#getId() */ public Long getId() { return id; } /** * Atribui um novo id Categoria. * * @param id * Novo id. */ public void setId(Long id) { this.id = id; } /** * Retorna o nome da Categoria. * * @return Nome da Categoria. */ public String getNome() { return nome; } /** * Atribui um novo nome Categoria. * * @param nome * Novo nome. */ public void setNome(String nome) { this.nome = nome; } /** * Retorna o Usurio dono da Categoria. * * @return Usurio dono da Categoria. */ public Usuario getUsuario() { return usuario; } /** * Atribui um novo Usurio como o dono da Categoria. * * @param usuario * Usurio dono da Categoria. */ public void setUsuario(Usuario usuario) { this.usuario = usuario; } /** * Retorna as Transaes associadas com a Categoria. * * @return Transaes associadas com a Categoria. */ public Set<Transacao> getTransacoes() { return transacoes; } /** * Atribui um novo conjunto de Transaes como sendo o associado a esta Categoria. * * @param transacoes * Transaes associadas a esta Categoria. */ public void setTransacoes(Set<Transacao> transacoes) { this.transacoes = transacoes; } /** * Adiciona uma nova Transao Categoria. * * @param transacao * Transao a ser adicionada. */ public void addTransacao(Transacao transacao) { this.transacoes.add(transacao); } /** * Remove a associao da Transao com a Categoria. * * @param transacao * Transao a ser removida. */ public void removerTransacao(Transacao transacao) { this.transacoes.remove(transacao); } /** * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((id == null) ? 0 : id.hashCode()); result = prime * result + ((nome == null) ? 0 : nome.hashCode()); return result; } /** * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Categoria other = (Categoria) obj; if (id == null) { if (other.id != null) return false; } else if (!id.equals(other.id)) return false; if (nome == null) { if (other.nome != null) return false; } else if (!nome.equals(other.nome)) return false; return true; } @Override public String toString() { return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE).append("id", id).append("nome", nome) .append("usuario", usuario).append("transacoes", transacoes).toString(); } }