<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6197478554780115958</id><updated>2011-04-21T13:11:42.830-07:00</updated><title type='text'>Java is Everywhere !!!</title><subtitle type='html'></subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://alwaysthinkjava.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://alwaysthinkjava.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Alberto Ribeiro</name><uri>http://www.blogger.com/profile/14003069465199407291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6197478554780115958.post-5233433731728181666</id><published>2008-05-26T06:34:00.000-07:00</published><updated>2008-05-26T06:35:54.474-07:00</updated><title type='text'>Em breve - Angola</title><content type='html'>&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6197478554780115958-5233433731728181666?l=alwaysthinkjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwaysthinkjava.blogspot.com/feeds/5233433731728181666/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6197478554780115958&amp;postID=5233433731728181666' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/5233433731728181666'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/5233433731728181666'/><link rel='alternate' type='text/html' href='http://alwaysthinkjava.blogspot.com/2008/05/angola.html' title='Em breve - Angola'/><author><name>Alberto Ribeiro</name><uri>http://www.blogger.com/profile/14003069465199407291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6197478554780115958.post-7243448956809962031</id><published>2007-07-21T10:16:00.000-07:00</published><updated>2007-07-21T10:17:19.607-07:00</updated><title type='text'>Certificação Java...</title><content type='html'>Galera quero compartilhar a alegria de ontém ter realizado a prova do scjp e ter passado com um score muito legal 81%, agradeço a todos aqueles que me incentivaram e apoiaram.... tem mais aqui:&lt;br /&gt;&lt;br /&gt;http://www.guj.com.br/posts/list/65074.java&lt;br /&gt;&lt;br /&gt;[]'s&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6197478554780115958-7243448956809962031?l=alwaysthinkjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwaysthinkjava.blogspot.com/feeds/7243448956809962031/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6197478554780115958&amp;postID=7243448956809962031' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/7243448956809962031'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/7243448956809962031'/><link rel='alternate' type='text/html' href='http://alwaysthinkjava.blogspot.com/2007/07/certificao-java.html' title='Certificação Java...'/><author><name>Alberto Ribeiro</name><uri>http://www.blogger.com/profile/14003069465199407291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6197478554780115958.post-7338665735415893456</id><published>2007-06-19T04:51:00.000-07:00</published><updated>2007-06-19T05:08:07.970-07:00</updated><title type='text'>Hibernate Composite Id...</title><content type='html'>Bom dia galera, depois de algum tempo hoje irei postar um exemplo de hibernate usando chave composta....&lt;br /&gt;&lt;br /&gt;Primeiramente vamos a tabela:&lt;br /&gt;&lt;br /&gt;Permissoes&lt;br /&gt;usuario #&lt;br /&gt;grupo   #&lt;br /&gt;centro_de_custo  #&lt;br /&gt;&lt;br /&gt;# chaves compostas&lt;br /&gt;&lt;br /&gt;Agora vamos mapear isso usando hibernate annotations com jpa.&lt;br /&gt;&lt;br /&gt;Classe Permissoes:&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;@Table(name = "permissoes")&lt;br /&gt;@IdClass(PermissoesPk.class)&lt;br /&gt;public class Permissoes implements Serializable {&lt;br /&gt;&lt;br /&gt; private static final long serialVersionUID = 1L;&lt;br /&gt;&lt;br /&gt; @Id&lt;br /&gt; @Column(name = "usuario")&lt;br /&gt; private String usuario;&lt;br /&gt;&lt;br /&gt; @Id&lt;br /&gt; @Column(name = "grupo")&lt;br /&gt; private String grupo;&lt;br /&gt;&lt;br /&gt; @Id&lt;br /&gt; @Column(name = "centro_de_custo")&lt;br /&gt; private int centroDeCusto;&lt;br /&gt;&lt;br /&gt;// gets e sets&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;Criaremos então uma nova classe que contém essas chaves:&lt;br /&gt;&lt;br /&gt;@Embeddable&lt;br /&gt;public class PermissoesPk implements Serializable {&lt;br /&gt;&lt;br /&gt; private static final long serialVersionUID = 1L;&lt;br /&gt;&lt;br /&gt; private String grupo;&lt;br /&gt;&lt;br /&gt; private String usuario;&lt;br /&gt;&lt;br /&gt; private int centroDeCusto;&lt;br /&gt;&lt;br /&gt;// gets e sets&lt;br /&gt;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;De acordo com a documentação para fazer um mapeamento de chaves compostas a classe que contém o nome com final PK deve sobreescrever o método equals e hascode e também implementar Serializable.&lt;br /&gt;&lt;br /&gt;Na documentação do hibernate tem outras duas formas de mapeamento usando @Id ou @EmbeddedId.&lt;br /&gt;&lt;br /&gt;Veja este exemplo usando @Id:&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;public class RegionalArticle implements Serializable {&lt;br /&gt;&lt;br /&gt;    @Id&lt;br /&gt;    public RegionalArticlePk getPk() { ... }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;@Embeddable&lt;br /&gt;public class RegionalArticlePk implements Serializable { ... }&lt;br /&gt;&lt;br /&gt;Veja este exemplo usando @EmbeddedId:&lt;br /&gt;&lt;br /&gt;@Entity&lt;br /&gt;public class RegionalArticle implements Serializable {&lt;br /&gt;&lt;br /&gt;    @EmbeddedId&lt;br /&gt;    public RegionalArticlePk getPk() { ... }&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;public class RegionalArticlePk implements Serializable { ... }&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;esses exemplos são para guardar, futuramentem precisarei com ctz.&lt;br /&gt;&lt;br /&gt;mais exemplos siga:&lt;br /&gt;http://www.hibernate.org/hib_docs/annotations/reference/en/html_single/#d0e1659&lt;br /&gt;&lt;br /&gt;[]'s&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6197478554780115958-7338665735415893456?l=alwaysthinkjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwaysthinkjava.blogspot.com/feeds/7338665735415893456/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6197478554780115958&amp;postID=7338665735415893456' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/7338665735415893456'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/7338665735415893456'/><link rel='alternate' type='text/html' href='http://alwaysthinkjava.blogspot.com/2007/06/hibernate-composite-id.html' title='Hibernate Composite Id...'/><author><name>Alberto Ribeiro</name><uri>http://www.blogger.com/profile/14003069465199407291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6197478554780115958.post-9203815961770997148</id><published>2007-06-12T04:10:00.000-07:00</published><updated>2008-12-09T23:04:30.818-08:00</updated><title type='text'>Tutorial Abstract Factory Method...</title><content type='html'>&lt;div style="color: #000000; font-size: 13px; font-family: arial;"&gt;Bom dia, hoje postarei algo sobre o padrão Abstract Factory Method, vamos lá...&lt;br /&gt;&lt;br /&gt;Design Pattern: São uma coleção de padrões de desenho de software, que são soluções de problemas ocorridos no dia a dia de desenvolvimento de um software (são boas idéias).&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;strong&gt;Abstract Factory Method:&lt;/strong&gt; este padrão é bem recomendado como por exemplo quando você utiliza vários tipos de bancos de dados em seu projeto, ele é uma fábrica que retorna uma das várias fábricas.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;Vamos para um exemplo prático: Criarei uma factory para retornar um dos vários objetos DAO's do meu projeto, considere o seguinte diagrama:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://2.bp.blogspot.com/_i0xG7ki8H54/Rm6FpzzSS0I/AAAAAAAAAAM/K87uTDNxY9g/s1600-h/factory.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_i0xG7ki8H54/Rm6FpzzSS0I/AAAAAAAAAAM/K87uTDNxY9g/s320/factory.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5075140783419575106" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;&lt;br&gt;Segue a implementação no código deste diagrama:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Esta classe abstrata é a Factory que retorna instancia de outras factories:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;public abstract class DAOFactory {&lt;br /&gt;&lt;br /&gt; public abstract UserDAO getUserDAO();&lt;br /&gt;&lt;br /&gt; public static DAOFactory getInstance(int wichFactory) {&lt;br /&gt;  switch (wichFactory) {&lt;br /&gt;  case 1:&lt;br /&gt;   return new MySqlUserDAOFactory();&lt;br /&gt;  case 2:&lt;br /&gt;   return new PostgresUserDAOFactory();&lt;br /&gt;  default:&lt;br /&gt;   return null;&lt;br /&gt;  }&lt;br /&gt; }&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Factory para MySql&lt;/strong&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;public class MySqlUserDAOFactory extends DAOFactory {&lt;br /&gt;&lt;br /&gt; @Override&lt;br /&gt; public UserDAO getUserDAO() {&lt;br /&gt;  return new MySqlUserDAO();&lt;br /&gt; }&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Factory para Postgres&lt;/strong&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;public class PostgresUserDAOFactory extends DAOFactory {&lt;br /&gt; @Override&lt;br /&gt; public UserDAO getUserDAO() {&lt;br /&gt;  return new PostgresUserDAO();&lt;br /&gt; }&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Interface UserDAO, contém os métodos que os DAO's devem implementar.&lt;/strong&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;public interface UserDAO {&lt;br /&gt; public void save(Object o);&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DAO para MySQL&lt;/strong&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;public class MySqlUserDAO implements UserDAO {&lt;br /&gt; public void save(Object o) {&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt; }&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;DAO para Postgres&lt;/strong&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;public class PostgresUserDAO implements UserDAO {&lt;br /&gt; public void save(Object o) {&lt;br /&gt;  // TODO Auto-generated method stub&lt;br /&gt; }&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Vamos ver como chamariamos as nossas classes:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;public static void main(String[] args) {&lt;br /&gt;  DAOFactory daoFactory = DAOFactory.getInstance(1);&lt;br /&gt;  // retorna a factory para MySql&lt;br /&gt;  UserDAO userDAO = daoFactory.getUserDAO();&lt;br /&gt;  userDAO.save(new Object());&lt;br /&gt;  &lt;br /&gt;  DAOFactory daoFactory2 = DAOFactory.getInstance(2);&lt;br /&gt;  // retorna a factory para Postgres&lt;br /&gt;  UserDAO userDAO2 = daoFactory2.getUserDAO();&lt;br /&gt;  userDAO2.save(new Object());&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Com isso a nossa implementação termina, um detalhe importante que deve-se notar é que se por um acaso um dia sua empresa decicidir incluir o oracle basta apenas criar uma nova factory OracleUserDAOFactory e estender a classe DAOFactory e pronto, com esse padrão fica muito flexível incluir e excluir qualquer nova implementação.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;É isso ae...&lt;br /&gt;&lt;br /&gt;[]'s&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6197478554780115958-9203815961770997148?l=alwaysthinkjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwaysthinkjava.blogspot.com/feeds/9203815961770997148/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6197478554780115958&amp;postID=9203815961770997148' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/9203815961770997148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/9203815961770997148'/><link rel='alternate' type='text/html' href='http://alwaysthinkjava.blogspot.com/2007/06/tutorial-abstractfactorymethod.html' title='Tutorial Abstract Factory Method...'/><author><name>Alberto Ribeiro</name><uri>http://www.blogger.com/profile/14003069465199407291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/_i0xG7ki8H54/Rm6FpzzSS0I/AAAAAAAAAAM/K87uTDNxY9g/s72-c/factory.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6197478554780115958.post-2922796179211334999</id><published>2007-06-12T04:04:00.001-07:00</published><updated>2008-12-09T23:04:31.166-08:00</updated><title type='text'>Tutorial Hibernate...</title><content type='html'>&lt;div style="color: #000000; font-size: 13px; font-family: arial;"&gt;&lt;br /&gt;Eae galera.....&lt;br /&gt;&lt;br /&gt;Vou começar com um breve tutorial de Hibernate:&lt;br /&gt;&lt;br /&gt;Primeiramente estarei explicando alguns conceitos que estão relacionados com frameworks de persistência:&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Um framework de persistência deve prover algumas funcionalidades e serviços para ser considerável a utilização do mesmo, citarei alguns seviços e funcionalidades referente a framework de persistência, em nosso exemplo do Hibernate.&lt;/p&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;strong&gt;·    Controle transacional:&lt;/strong&gt; o framework deve permitir rollback quando ocorrer algum erro e commit quando o objeto for persistido com sucesso.&lt;br /&gt;&lt;strong&gt;·    Identificadores de objeto:&lt;/strong&gt; cada objeto de ter um identificador único para ser relacionado com o registro correspondente. Um OID (Object Identifier) garante que o objeto não se duplicará.&lt;br /&gt;&lt;strong&gt;·    Mapeamento O-R:&lt;/strong&gt; se não utilizar um banco de dados orientado a objetos deve existir um mapeamento de objeto relacional entre a classe e a tabela do banco de dados isso é um dos requisitos principais de um framework de persistência de objetos é responsável por transformar uma representação de dados não orientada a objetos em um objeto e por armazenar um objeto persistente no seu mecanismo de persistência como um banco de dados, por exemplo.&lt;br /&gt;&lt;strong&gt;·    Cache:&lt;/strong&gt; com o uso do cache o objeto é colocado em uma memória local para obter um maior desempenho, quando for necessário o uso desse objeto basta apenas buscá-lo na memória local que ele foi colocado agilizando todo o processo.&lt;br /&gt;&lt;strong&gt;·    Consultas sob demanda:&lt;/strong&gt; os objetos são carregados apenas quando necessário evitando que registros sejam recuperados, todos de uma vez só. Com isso reduz a carga de informações na rede, se sua aplicação for utilizada através de internet este recurso garante um melhor desempenho.&lt;br /&gt;&lt;strong&gt;·    Proxy:&lt;/strong&gt; é um objeto proxy de forma que o usuário e o serviço de persistência conseguem identificar. Assim quando um objeto for carregado apenas as informações definidas pelo objeto proxy serão recuperadas.&lt;br /&gt;&lt;strong&gt;·    Queries:&lt;/strong&gt; utilizado para consultas mais complexas, isto pode ser feito através de OQL (Object Query Language) que é uma linguagem de consulta a banco de dados orientados a objetos ou também embutindo código SQL (Structure Query Language) na aplicação, pois isto não é muito recomendado porque acopla a estrutura do banco de dados com a sua aplicação.&lt;br /&gt;&lt;strong&gt;.     Portabilidade:&lt;/strong&gt; um framework de persistência deve ser compatível com vários tipos de mecanismos de persistência de dados e também disponibilizar diversas maneiras de conexão, sendo isso muito importante porque quando for necessário trocar de mecanismo de persistência de dados não é necessário mudar toda sua aplicação.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Então o que é Hibernate ? Quais as vantagens de utilizar ? Quais desvantagens ?&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;Hibernate é um framework de persistência que permite a utilização de banco de dados relacional, porém, trabalhando com objetos, falar isso apenas é muito pouco&lt;br /&gt;para o que o Hibernate pode fazer...&lt;br /&gt;Uma das vantagens de utilizá-lo é que o desenvolvimento de aplicação se torna mais rápido, por não ter que escrever códigos e mais códigos SQL da vida... A idéia do&lt;br /&gt;hibernate é encapsular todo o código SQL Jdbc por tráz de sua implementação, ficando transparente para o desenvolvedor.&lt;br /&gt;Uma das desvantagens do hibernate é que para criar algumas queries bem complexas deve-se perder um tempo maior estudando as Criterias da vida!!!! São um pouco&lt;br /&gt;complexas...&lt;br /&gt;Outra desvantagen que eu considero é colocar milhões de jar's em sua aplicação, porém uma vez configurado não é preciso mexer novamente.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Exemplo:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tudo isso:&lt;/strong&gt;&lt;br /&gt;INSERT INTO agendaadmissao (codigoagenda, nomecandidato, matriculacoordenador, codigocurso, data, status)&lt;br /&gt;VALUES("1", "João da Silva Dias", "p100", "2", "2007-06-28 19:40:00", "P");&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;por isso:&lt;/strong&gt;&lt;br /&gt;session.save(objeto); // uau em uma linha!!!!&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;O hibernate permite ainda ir mais além, com apenas essa linha citada acima ele salva também todos os relacionamentos, para isso basta apenas configurar&lt;br /&gt;uma propriedade chamada de Cascade, temos alguns tipos de cascade como:&lt;br /&gt;ALL = persiste o objeto pai mais todos os filhos, cuidado ao utilizar pois se você deletar um objeto pai e tiver com essa propriedade tudo vai pro espaço...&lt;br /&gt;None = este é o default, as operações relacionadas ao objeto pai apenas sofrerão alguma mudança nele mesmo em mais ninguém.&lt;br /&gt;Save Update = onde o objeto pai pode salvar ou atualizar os filhos.&lt;br /&gt;Persist = Apenas para operações de save.&lt;br /&gt;All delete orphan = a partir do objeto pai ele deleta os filhos.&lt;/p&gt;&lt;br /&gt;&lt;br /&gt;O Hibernate possui algumas interfaces importantes que vale a pena ser descrito, então vamos lá:&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;&lt;strong&gt;1º Interface de sessão (Session):&lt;/strong&gt; Sessão (Session) é a interface primária do Hibernate, é de peso leve e mais fácil de criar e destruir. O objeto Session, por ser leve, ajudará na sua aplicação porque há uma grande necessidade de criar e destruir objetos Session há quase todo instante. As sessões não são Threadsafe, ou seja, uma Sessão do Hibernate é algo entre conexão e transação. Pode ser um armazenamento ou coleção de objetos numa única unidade de trabalho, podendo ser chamada de gerente de persistência, que faz a interface com operações relacionadas com a persistência, armazenando e recuperando objetos.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;2º Interface SessionFactory:&lt;/strong&gt; a interface SessionFactory não é considerada peso leve, sendo compartilhada entre muitas threads. Para a SessionFactory há um único aplicativo, criado na inicialização. Se seu aplicativo for acessar bancos de dados múltiplos usando Hibernate, é necessário uma SessionFactory para cada banco de dados. Esta interface controla dados armazenados e que foram lidos em uma unidade de trabalho, podendo ser reutilizados em uma unidade futura. Isso se o mapeamento de classe especificar o armazenamento do segundo nível. Geralmente a SessionFactory armazena instruções SQL (Structured Query Language), e outros metadados que são executados em tempo de execução.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;3º Interface de Configuração:&lt;/strong&gt; Segundo Bauer, King (2005, p. 39), a interface de configuração vai ser a primeira a ser encontrada quando você usar o Hibernate. Essa interface é muito importante porque depois de configurada, o Hibernate vai criar o SessionFactory.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;4º Interface de Transação:&lt;/strong&gt; é uma API (Application Programming Interface) opcional do Hibernate uma transação permite controlar os limites das transações usando uma API consistente com isso tornam-se portáveis os aplicativos do Hibernate com ambientes diferentes de execução.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;5º Consulta e critérios de interfaces:&lt;/strong&gt; a interface de consulta e critério serve para executar consultas no banco de dados. As consultas são feitas “escritas” em SQL(Structured Query Language) de seu banco de dados, para ligar parâmetros de consultas e limitar o número de resultados devolvidos pela consulta.&lt;br /&gt;&lt;/p&gt;&lt;br /&gt;Vamos para o que interessa, criar um exemplo simples:&lt;br /&gt;&lt;br /&gt;Vamos supor que estamos desenvolvendo um cadastro de cliente, (por enquanto, sem relacionamento):&lt;br /&gt;&lt;br /&gt;Temos então:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;Tabelas:&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;&lt;strong&gt;DROP TABLE IF EXISTS `cliente`;&lt;br /&gt;CREATE TABLE  `cliente` (&lt;br /&gt;  `nome` varchar(30) default NULL,&lt;br /&gt;  `id_cliente` int(9) NOT NULL auto_increment,&lt;br /&gt;  PRIMARY KEY  (`id_cliente`)&lt;br /&gt;) ENGINE=InnoDB DEFAULT CHARSET=latin1;&lt;/font&gt;&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Para cada tabela dessa temos um Objeto chamado de Objeto ORM (Mapeamento de Objeto Relacional), ou seja o mapeamento das suas classes.&lt;br /&gt;&lt;br /&gt;Essa é uma classe simples JavaBean com método get e set, a partir desta classe que faremos o mapeamento:&lt;br /&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;&lt;strong&gt;&lt;br /&gt;/**&lt;br /&gt; * @author alberto ribeiro&lt;br /&gt; */&lt;br /&gt;public class Cliente {&lt;br /&gt;    private int id;&lt;br /&gt;    private String nome;&lt;br /&gt;    get's e set's&lt;br /&gt;}&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Para a criação da aplicação alguns jar's terão que ser incluidos no classpath do projeto:&lt;br /&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;&lt;strong&gt;Hibernate3.jar: core do Hibernate.&lt;br /&gt;c3p0-0.8.4.5.jar: Pool de conexão básico para executar testes unitários.&lt;br /&gt;cglib-full-2.0.2.jar: biblioteca geradora de código para criação de proxies para classes persitentes.&lt;br /&gt;dom4j-1.4.jar: biblioteca XML para parse de arquivos de configuração e mapeamento.&lt;br /&gt;ecache-0.9.jar: cachê puro em Java, cachê padrão do Hibernate.&lt;br /&gt;jta.jar: Java Transaction API.&lt;br /&gt;commons-loging-1.0.4.jar: base para o mapeamento de produtos objeto relacional&lt;br /&gt;commons-collections-2.1.1: contém as listas como bag, array list entre outros tipos de listas.&lt;br /&gt;ojdbc.jar: jar do fabricante do bando de dados&lt;/strong&gt;&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;Abaixo o mapeamento ORM, da classe Cliente, chamaremos de ClienteORM.hbm.xml:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_fMFq6ogMrAU/Rm2jLyzeTUI/AAAAAAAAAA0/OwyNSjfCkIQ/s1600-h/cfg.xml.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://1.bp.blogspot.com/_fMFq6ogMrAU/Rm2jLyzeTUI/AAAAAAAAAA0/OwyNSjfCkIQ/s320/cfg.xml.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5074891778127973698" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;p align="justify"&gt;&lt;br /&gt;Neste mapeamento vale ressaltar algumas propridades:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;class name =&lt;/strong&gt; é o relacionamento da tabela com a classe, sendo que o atributo name deve conter o nome completo do objeto incluindo o pacote e o atributo table deve conter o nome da tabela.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;table =&lt;/strong&gt; nome da tabela referente a classe.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;id =&lt;/strong&gt; nome do campo id dentro da classe cliente&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;column =&lt;/strong&gt; "id_cliente"  = referente ao nome da coluna no banco de dados.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;type =&lt;/strong&gt; o tipo da propriedade no caso id_cliente é um int.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;generator =&lt;/strong&gt; referente ao esquema de geração de ID no banco de dados, o native indica que o banco se encarregará de gerar este número sequencial.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;property =&lt;/strong&gt; a propriedade da classe, exemplo: nome e seu tipo string.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Depois de ter as classes mapeadas em um arquivo xml, temos então que configurar o hibernate.cfg.xml que será responsável&lt;br /&gt;por algumas propiedades importantes de configuração:&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_fMFq6ogMrAU/Rm2fLCzeTTI/AAAAAAAAAAs/KPsIDoP6lw8/s1600-h/cfg.xml.jpg"&gt;&lt;img style="float:left; margin:0 10px 10px 0;cursor:pointer; cursor:hand;" src="http://2.bp.blogspot.com/_fMFq6ogMrAU/Rm2fLCzeTTI/AAAAAAAAAAs/KPsIDoP6lw8/s320/cfg.xml.jpg" border="0" alt=""id="BLOGGER_PHOTO_ID_5074887367196560690" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;Vale ressaltar as seguintes propridades:&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;dialect =&lt;/strong&gt; responsável pela geração das intruções SQL de acordo com cada Bando de Dados, ele representa a linguagem que será gerada as queries da aplicação para o banco.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;connection.url =&lt;/strong&gt; a url é específica ao banco de dados utilizado, na url passamos como parâmetros o IP da máquina ou o nome do servidor, porta e o nome da base de dados. Usuário e senha são do banco de dados&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;connection.driver_class =&lt;/strong&gt; O nome do driver que estamos utilizando no caso MySQL.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;connection.username =&lt;/strong&gt; username no banco de dados.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;connection.password =&lt;/strong&gt; senha no banco de dados.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;show_sql =&lt;/strong&gt; se estiver marcado como true, todas as queries geradas serão impressas no console.&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;mapping resource =&lt;/strong&gt; local onde estão os mapeamentos XML referente as classes.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Criaremos agora uma classe utilitária responsável por criar as famosas Session's do hibernate:&lt;br /&gt;&lt;br /&gt;&lt;font color="#0066FF"&gt;&lt;br /&gt;public class HibernateUtil {&lt;br /&gt;&lt;br /&gt;    private static SessionFactory sessionFactory;&lt;br /&gt;&lt;br /&gt;    private static Session session;&lt;br /&gt;&lt;br /&gt;    private static Logger logger = Logger.getLogger(HibernateUtil.class);&lt;br /&gt;&lt;br /&gt;    static {&lt;br /&gt;        sessionFactory = new Configuration().configure().buildSessionFactory();&lt;br /&gt;            // obs o arquivo hibernate.cfg.xml deve estar na pasta src, o hibernate procura ela la dentro&lt;br /&gt;            // caso queira ficar em outro lugar deve mudar aqui: new Configuration().configure("nome do pacote onde está o //arquivo").buildSessionFactory();&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;        if (logger.isDebugEnabled()) {&lt;br /&gt;            logger.info("Criando a session factory");&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static Session getCurrentSession() {&lt;br /&gt;        if (session == null || !session.isOpen() || !session.isConnected()) {&lt;br /&gt;            session = ((SessionFactory) sessionFactory).openSession();&lt;br /&gt;        }&lt;br /&gt;        return session;&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;    public static void closeSession() {&lt;br /&gt;        session.close();&lt;br /&gt;    }&lt;br /&gt;&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Criando nosso DAO, mas antes uma breve explicação: DAO é um padrão de projetos que veio para separar a camada de modelos de dados referente a banco de dados dos modelos de objetos, caso o mecanismo de persistencia troque, modifica-se a camada DAO.&lt;br /&gt;Dentro desse DAO ficará os métodos CRUD, ou seja, create, retrieve, update e delete.&lt;br /&gt;&lt;br /&gt;ClienteDAO:&lt;br /&gt;&lt;font color="#0066FF"&gt;&lt;br /&gt;public class ClienteDAO{&lt;br /&gt;&lt;br /&gt;    public void save(Object object) throws AcessoBaseDeDadosException {&lt;br /&gt;        if (object == null) {&lt;br /&gt;            throw new AcessoBaseDeDadosException(&lt;br /&gt;                    "O objeto à ser salvo está nulo.");&lt;br /&gt;        }&lt;br /&gt;&lt;br /&gt;        try {&lt;br /&gt;            HibernateUtil.getCurrentSession().save(object);&lt;br /&gt;        } catch (HibernateException e) {&lt;br /&gt;            throw new AcessoBaseDeDadosException("Erro persistindo o objeto: "&lt;br /&gt;                    + object.getClass().toString(), e);&lt;br /&gt;        } catch (Exception e) {&lt;br /&gt;            throw new AcessoBaseDeDadosException("Erro persistindo o objeto: "&lt;br /&gt;                    + object.getClass().toString(), e);&lt;br /&gt;        }&lt;br /&gt;    }&lt;br /&gt;&lt;/font&gt;}&lt;br /&gt;&lt;br /&gt;A estrutura do projeto ficou assim:&lt;br /&gt;&lt;br /&gt;Persistencia&lt;br /&gt;     src&lt;br /&gt;        br/edu/persistencia/common/&lt;br /&gt;                                  &amp;nbsp;&amp;nbsp;&amp;nbsp;Cliente.java&lt;br /&gt;                                  &amp;nbsp;&amp;nbsp;&amp;nbsp;ClienteORM.hbm.xml&lt;br /&gt;        br/edu/persistencia/dao/&lt;br /&gt;                                &amp;nbsp;&amp;nbsp;&amp;nbsp;ClienteDAO.java&lt;br /&gt;        br/edu/persistencia/util/&lt;br /&gt;                                &amp;nbsp;&amp;nbsp;&amp;nbsp;HibernateUtil.java&lt;br /&gt;        hibernate.cfg.xml&lt;br /&gt;    lib&lt;br /&gt;       &amp;nbsp;&amp;nbsp;&amp;nbsp;Todos os jar's citados acima.&lt;br /&gt;&lt;br /&gt;Podemos agora fazer o teste:&lt;br /&gt;&lt;font color="#0066FF"&gt;&lt;br /&gt;public class Teste {&lt;br /&gt;&lt;br /&gt;    public static void main(String[] args) throws Exception {&lt;br /&gt;        ClienteDAO dao = new ClienteDAO();       &lt;br /&gt;       &lt;br /&gt;        Cliente cliente = new Cliente();&lt;br /&gt;        cliente.setNome("Alberto");&lt;br /&gt;&lt;br /&gt;        Session session = HibernateUtil.getCurrentSession(); // Pegando uma sessão, caso esteja em aberto ele apenas //retorna uma sessão corrente&lt;br /&gt;        Transaction tx = session.begintransaction(); // iniciando uma transação para poder inserir no banco de dados&lt;br /&gt;        dao.save(cliente); // chamando o método save da classe DAO&lt;br /&gt;        tx.commit(); // finalizando a transação.&lt;br /&gt;        session.close(); // fechando a sessão com o banco.&lt;br /&gt;    }&lt;br /&gt;}&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;É isso ai então, depois testar, mas, acredito que esteja correto, qualquer dúvida mande!!!! Este foi o primeiro, não sei se está bom mas com o tempo isso melhora...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[]'s&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6197478554780115958-2922796179211334999?l=alwaysthinkjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwaysthinkjava.blogspot.com/feeds/2922796179211334999/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6197478554780115958&amp;postID=2922796179211334999' title='1 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/2922796179211334999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/2922796179211334999'/><link rel='alternate' type='text/html' href='http://alwaysthinkjava.blogspot.com/2007/06/tutorial-hibernate.html' title='Tutorial Hibernate...'/><author><name>Alberto Ribeiro</name><uri>http://www.blogger.com/profile/14003069465199407291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://1.bp.blogspot.com/_fMFq6ogMrAU/Rm2jLyzeTUI/AAAAAAAAAA0/OwyNSjfCkIQ/s72-c/cfg.xml.jpg' height='72' width='72'/><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6197478554780115958.post-1617364139398656911</id><published>2007-06-08T08:16:00.000-07:00</published><updated>2007-06-08T09:07:23.967-07:00</updated><title type='text'></title><content type='html'>&lt;div style="color: #0066FF; font-size: 13px; font-family: arial; font-weight: bold;&lt;br /&gt;"&gt;Boa tarde pessoal, hoje começa uma nova etapa...&lt;br /&gt;&lt;br /&gt;Estarei começando a relatar alguns erros ocorridos no dia a dia de desenvolvimento e postando é claro a solução né!!! rssss&lt;br /&gt;&lt;br /&gt;Estarei postando alguns tutoriais também...&lt;br /&gt;&lt;br /&gt;Aguardem...&lt;br /&gt;&lt;br /&gt;Prometo me dedicar!!!&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6197478554780115958-1617364139398656911?l=alwaysthinkjava.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://alwaysthinkjava.blogspot.com/feeds/1617364139398656911/comments/default' title='Postar comentários'/><link rel='replies' type='text/html' href='http://www.blogger.com/comment.g?blogID=6197478554780115958&amp;postID=1617364139398656911' title='0 Comentários'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/1617364139398656911'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6197478554780115958/posts/default/1617364139398656911'/><link rel='alternate' type='text/html' href='http://alwaysthinkjava.blogspot.com/2007/06/boa-tarde-pessoal-hoje-comea-uma-nova.html' title=''/><author><name>Alberto Ribeiro</name><uri>http://www.blogger.com/profile/14003069465199407291</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
