Tapestry com Hibernate

Criando a camada de persistência dos dados

O Tapestry oferece suporte a Hibernate. Nesse exemplo os dados serão armazenados usando o banco de dados HSQLDB.

Maven

Informe as novas dependências do projeto no arquivo de configuração do Maven.

pom.xml

<dependencies>
        ...
        <dependency>
             <groupId>org.apache.tapestry</groupId>
             <artifactId>tapestry-hibernate</artifactId>
             <version>${tapestry-release-version}</version>
         </dependency>
 
         <dependency>
             <groupId>hsqldb</groupId>
             <artifactId>hsqldb</artifactId>
             <version>1.8.0.7</version>
         </dependency>
         ...
</dependencies>
...

Hibernate Configuration

Crie o arquivo de configurações do Hibernate.

src/main/resources/ hibernate.cfg.xml

<!DOCTYPE hibernate-configuration PUBLIC
        "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <property name="hibernate.connection.driver_class">org.hsqldb.jdbcDriver</property>
        <property name="hibernate.connection.url">jdbc:hsqldb:./target/work/t5teste;shutdown=true</property>
        <property name="hibernate.dialect">org.hibernate.dialect.HSQLDialect</property>
        <property name="hibernate.connection.username">sa</property>
        <property name="hibernate.connection.password"></property>
        <property name="hbm2ddl.auto">update</property>
        <property name="hibernate.show_sql">true</property>
        <property name="hibernate.format_sql">true</property>
    </session-factory>
</hibernate-configuration>

Atenção: na listagem acima a tag <property name="hbm2ddl.auto">update</property> informa ao Hibernate para fazer o update na estrutura das tabelas quando você alterar a estrutura das entitades, as outras opções são: validate (faz apenas a validação e informa se houver diferenças entre a estrutura das entidades e das tabelas; e create (apaga todo o banco de dados e cria um novo com as tabelas vazias).

Adicione as anotações @Entity e @Id na entidade Usuário.

src/main/java/org.exemplo.t5teste.entities. Usuario.java

...
import javax.persistence.Entity;
import javax.persistence.Id;
 
@Entity
public class Usuario
{
    ...
    @Id
    private long id;
    ...
}

DAO (Data Access Object) é um padrão de projeto para persistência de dados que permite separar regras de negócio das regras de acesso a banco de dados. Crie um DAO genérico.

src/main/java/org.exemplo.t5teste.dao. GenericDAO.java

package org.exemplo.t5teste.dao;
 
import java.util.List;
import org.hibernate.criterion.Restrictions;
import org.hibernate.Session;
 
public class GenericDAO 
{
    protected Session hibernateSession;
    private Class<?> entityClass;
 
    public GenericDAO(Session hibernateSession, Class<?> entityClass)
    {
        this.hibernateSession = hibernateSession;
        this.entityClass = entityClass;
     }
 
     public List<?> getList()
     {
         return hibernateSession.createCriteria(entityClass).list();
     }
 
    public void gravar(Object entity) 
    {
        hibernateSession.saveOrUpdate(entity);
    }
 
    public void deleteById(long id)
    {
        hibernateSession.clear();
        hibernateSession.delete(this.getById(id));
     }
 
 public Object getById(long id)
    {
         return hibernateSession.createCriteria(entityClass).add(Restrictions.eq("id", id)).uniqueResult();
     }
 }

Altere a página Cadastro.

src/main/java/org.exemplo.t5teste.pages.usuario. Cadastro.java

...
import org.apache.tapestry5.annotations.PageActivationContext;
import org.apache.tapestry5.hibernate.annotations.CommitAfter;
import org.apache.tapestry5.ioc.annotations.Inject;
import org.exemplo.t5teste.dao.GenericDAO;
import org.hibernate.Session;
...
 
@PageActivationContext
@Property
private Usuario usuario;
 
...
 
@Inject
private Session session;
 
void onSuccess()
{
        gravar();
        usuario = new Usuario();
        return;
}
 
@CommitAfter
void gravar()
{
        if (usuario.getId() == 0)
        {
            usuario.setId(new Date().getTime());
        }
        final GenericDAO dao = new GenericDAO(session, Usuario.class);
        dao.gravar(usuario);
}
...

src/main/resources/org/exemplo/t5teste/pages/usuario/ Cadastro.tml

...
    <p>
        [
        <t:PageLink t:page="usuario/Cadastro" t:context="0">Limpar</t:PageLink>
        ]
    </p>
...

Mais informações

Veja o guia do usuário e as páginas de configurações e estatísticas no site do Tapestry-Hibernate

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License