Wolf_X
Agosto 21, 2010, 8:59pm
#1
galera , to com uma duvida
eis a minha situacao
vamos dizer q eu tenha varios objetos q podem ser encadeados, tipo …
n para n 1 para n 1 para 1
nivel <-> tabpreco ->grupo <- produto ->cor
|->tamanho
minha duvida eh … se eu encadear todas as entidades e chama-las no hibernate pelo nivel , o hibernate chama todos os objetos encadeados… isso nao vai torna a aplicacao lenta desnecessariamente nao ???
vlw gente
depende mano se ambas as colecoes estiverem com inicialização apresada isso sim
vai deixar a aplicaçao lenta. mais em caso contrario não vai tanto.
mais em certos casos onde e viavel criar cache de objetos isso pode ater ser melhorado
dependendo do que seja isso pode ter quase o mesmo desempenho se estive-se usando jdbc
no caso em que as colecoes tevesse que ser inicialidades.
Wolf_X
Agosto 24, 2010, 12:47pm
#3
opa, vlw ajinfotec, estou lendo mais um pouco sobre hibernate pra poder configura-lo corretamente e assim nao perder desenpenho
chapa uma junção de hibernate e jpa e show de bola
começa a ler sobre jpa tambem que e bem mais pratico
mapear as entidades com annotation do jpa que os xml
e sem contar que voce não vai ter os arquivos xml no seu
projeto tudo fica na declaração da classe.
ai um exemplo de jpa.
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
/**
*
* @author antoniel
*/
@Entity
@Table(name = "pessoas")
@Inheritance(strategy=InheritanceType.JOINED)
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "id_pessoa")
private Integer idPessoa;
@Column(name = "nome")
private String nome;
@Column(name = "nome_fantasia")
private String nomeFantasia;
@Column(name = "foto")
private byte[] foto;
@Column(name = "data_cadastro")
@Temporal(TemporalType.DATE)
private Date dataCadastro;
@Column(name = "ativo")
private Boolean ativo;
@JoinColumn(name = "id_contato", referencedColumnName = "id_contato")
@ManyToOne(cascade=CascadeType.ALL)
private Contato contato;
@JoinColumn(name = "id_endereco", referencedColumnName = "id_endereco")
@ManyToOne(cascade=CascadeType.ALL)
private Endereco endereco;
...
}
Interessante, usei a configuração automática do netbeans para o hibernate…
Nele preciso gerar além do hibernate.cfg.xml…
a hibernate.reveng.xml
a hibernateUtil.java
a classegetandset.java
a classe.hbm.xml.
No caso se for usar JPA vou precisar gerar somente:
hibernate.cfg.xml
hibernate.reveng.xml
hibernateUtil.java
classegetandset.java com annotations.
???
está certo isso???
Obrigado!!!
certo e isso ai.
eu so crio o hibernate.cfg.xml
não uso o hibernate.reveng.xml
e nem a HibernateUtil.java
trabalho de outra forma para obter
uma session.
primeiro crio um DAOImpl que implementa a minha intefeice DAO
e depois o crio DAO de cada objeto.
public abstract class DAOImpl implements DAO {
static {
System.out.println("inicializando");
try {
factory = new AnnotationConfiguration().configure()
.addAnnotatedClass(PessoaFisica.class)
.addAnnotatedClass(Funcionario.class)
.addAnnotatedClass(Endereco.class)
.addAnnotatedClass(Pessoa.class)
.addAnnotatedClass(Contato.class)
.buildSessionFactory();
System.out.println("inicializado");
} catch(HibernateException he) {
he.printStackTrace();
}
}
public DAOImpl() {
}
public void open() throws HibernateException{
session = factory.openSession();
transaction = session.beginTransaction();
}
public void close() throws HibernateException{
if (transaction != null) {
transaction.commit();
}
if (session != null) {
session.close();
}
}
public void saveObject(Object o) throws HibernateException {
open();
session.save(o);
close();
}
public void deleteObject(Object o) throws HibernateException {
open();
session.delete(o);
close();
}
public void updateObject(Object o) throws HibernateException {
open();
session.update(o);
close();
}
protected static SessionFactory factory;
protected Session session;
protected Transaction transaction;
}
ai um exemplo do objeto de DAO(Data access Object) da entidade Funcionario
que herda de DAOImpl e implementa a intefeice FuncionarioDAO.
public class FuncionarioDAOImpl extends DAOImpl implements FuncionarioDAO{
public void save(Funcionario f) throws HibernateException {
saveObject(f);
}
public void delete(Funcionario f) throws HibernateException {
deleteObject(f);
}
public void update(Funcionario f) throws HibernateException {
updateObject(f);
}
public List<Funcionario> findAll() throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
public List<Funcionario> findByIdFuncionario(Integer idFuncionario) throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.add(Restrictions.eq("idPessoa", idFuncionario));
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
public List<Funcionario> findByNome(String nome) throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.add(Restrictions.like("nome", nome));
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
public List<Funcionario> findByBairro(String bairro) throws HibernateException {
return like0("bairro",bairro);
}
public List<Funcionario> findByTelefone(String telefone) throws HibernateException {
return like1("telefone",telefone);
}
public List<Funcionario> findByCelular(String celular) throws HibernateException {
return like1("celular",celular);
}
public List<Funcionario> findByRua(String rua) throws HibernateException {
return like0("rua",rua);
}
private List<Funcionario> like0(String propriedade,Object value) throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.createCriteria("endereco")
.add(Restrictions.like(propriedade, value));
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
private List<Funcionario> like1(String propriedade, Object value) throws HibernateException {
open();
Criteria criteria = session.createCriteria(Funcionario.class);
criteria.createCriteria("contato")
.add(Restrictions.like(propriedade, value));
criteria.addOrder(Order.asc("idPessoa"));
List<Funcionario> funcionarios = criteria.list();
close();
return funcionarios;
}
}
ai o codigo das intefeices DAO e FuncionarioDAO.
public interface DAO {
public abstract void open() throws HibernateException;
public abstract void close() throws HibernateException;
public abstract void saveObject(Object o) throws HibernateException;
public abstract void deleteObject(Object o) throws HibernateException;
public abstract void updateObject(Object o) throws HibernateException;
}
public interface FuncionarioDAO extends DAO{
public abstract void save(Funcionario f) throws HibernateException;
public abstract void delete(Funcionario f) throws HibernateException;
public abstract void update(Funcionario f) throws HibernateException;
public abstract List<Funcionario> findAll() throws HibernateException;
public abstract List<Funcionario> findByIdFuncionario(Integer idFuncionario) throws HibernateException;
public abstract List<Funcionario> findByNome(String nome) throws HibernateException;
public abstract List<Funcionario> findByBairro(String bairro) throws HibernateException;
public abstract List<Funcionario> findByTelefone(String telefone) throws HibernateException;
public abstract List<Funcionario> findByCelular(String celular) throws HibernateException;
public abstract List<Funcionario> findByRua(String rua) throws HibernateException;
}