SlideShare una empresa de Scribd logo
1 de 217
Curso: Persistência em Java com Hibernate ,[object Object],23/04/2007
Persistência ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Persistência ,[object Object],[object Object],[object Object],[object Object]
Banco de Dados Relacionais ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Banco de Dados Relacionais ,[object Object],[object Object],[object Object],[object Object],[object Object]
Persistindo dados com Java ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Persistindo objetos com Java (ou qualquer outra linguagem OO) ,[object Object],[object Object],[object Object],[object Object],[object Object]
Persistindo objetos com Java ,[object Object],[object Object],[object Object],[object Object]
Diferença dos Paradigmas: OO/Relacional ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Diferença dos Paradigmas ,[object Object],[object Object],[object Object],[object Object]
Diferença dos Paradigmas OO/Relacional ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Diferença dos Paradigmas OO/Relacional ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Diferença dos Paradigmas: Custo ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Estratégias de Persistência ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Estratégias de Persistência ,[object Object],[object Object],[object Object],[object Object],[object Object]
Estratégias de Persistência ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Estratégias de Persistência ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Hibernate ,[object Object],[object Object],[object Object],[object Object],[object Object]
Hibernate ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeamento Objeto Relacional ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeamento Objeto Relacional ,[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeamento Objeto Relacional ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeamento Objeto Relacional: Vantagens ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Vantagens ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Hibernate: Módulos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Módulos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Módulos ,[object Object],[object Object],[object Object],[object Object],[object Object]
Separação em camadas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Separação em camadas ,[object Object],[object Object],[object Object],[object Object],[object Object]
 
Criando um projeto
Next >....
Finish
Adicionando as bibliotecas
Criando uma entidade @Entity @Table (name =  "MESSAGES" ) public   class  Message { @Id @GeneratedValue @Column (name =  "MESSAGE_ID" ) private  Long  id ; @Column (name =  "MESSAGE_TEXT" ) private  String  text ; @ManyToOne (cascade = CascadeType. ALL ) @JoinColumn (name =  "NEXT_MESSAGE_ID" ) private  Message  nextMessage ; private  Message() {} public  Message(String text) { this . text  = text; } //gets e sets }
Annotations da classe ,[object Object],[object Object],[object Object],[object Object],@Entity @Table (name =  "MESSAGES" ) public   class  Message {
Construtores ,[object Object],private  Message() {} public  Message(String text) { this . text  = text; }
Propriedades ,[object Object],[object Object],[object Object],[object Object],@Id @GeneratedValue @Column (name =  "MESSAGE_ID" ) private  Long  id ;
Atributos ,[object Object],@Column (name =  "MESSAGE_TEXT" ) private  String  text ; ,[object Object],[object Object],@ManyToOne (cascade = CascadeType. ALL ) @JoinColumn (name =  "NEXT_MESSAGE_ID" ) private  Message  nextMessage ;
Transparência ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Configurando o Hibernate ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
hibernate.cfg.xml < hibernate-configuration > < session-factory > <!-- Parâmetros de acesso a base de dados --> < property  name = &quot;connection.driver_class&quot; > org.postgresql.Driver </ property > < property  name = &quot;connection.url&quot; > jdbc:postgresql://localhost:5432/curso </ property > < property  name = &quot;connection.username&quot; > postgresql </ property > < property  name = &quot;connection.password&quot; > postgresql </ property > < property  name = &quot;dialect&quot; > org.hibernate.dialect.PostgreSQLDialect </ property > ...
hibernate.cfg.xml ... <!-- Configuração do Pool de conexões --> < property  name = &quot;c3p0.min_size&quot; > 5 </ property > < property  name = &quot;c3p0.max_size&quot; > 20 </ property > < property  name = &quot;c3p0.timeout&quot; > 300 </ property > < property  name = &quot;c3p0.max_statements&quot; > 50 </ property > < property  name = &quot;c3p0.idle_test_period&quot; > 3000 </ property > <!-- Exibe no console o SQL gerado pelo hibernate--> < property  name = &quot;show_sql&quot; > true </ property > <!-- Cria e executa a DDL (tabelas, colunas, etc...)--> < property  name = &quot;hbm2ddl.auto&quot; > create </ property > <!-- Informa as Entidades da aplicação --> < mapping class = &quot;br.gov.serpro.curso.hibernate.exemplo1.Message&quot;  /> </ session-factory > </ hibernate-configuration >
Armazenando uma Mensagem //Obtendo o Session Session session = HibernateUtil.getSessionFactory().openSession(); //Iniciando a transação Transaction tx = session.beginTransaction(); // Criando uma mensagem Message message =  new  Message( &quot;Hello World&quot; ); // Salvando a Mensagem Long msgId = (Long) session.save(message); //Fazendo o commit da transação tx.commit(); //Fechando o Session session.close(); HibernateUtil.shutdown();
Objetos utilizados ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Objetos utilizados ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
HibernateUtil public   class  HibernateUtil { private   static  SessionFactory  sessionFactory ; static  { sessionFactory  =  new  AnnotationConfiguration().configure() .buildSessionFactory(); } public   static  SessionFactory getSessionFactory() { return   sessionFactory ; } public   static   void  shutdown() { getSessionFactory ().close(); } }
Recuperando as Mensagens Session newSession = HibernateUtil.getSessionFactory().openSession(); Transaction newTransaction = newSession.beginTransaction(); //Criando e executando uma consulta Query query = newSession .createQuery( &quot;from Message m order by m.text asc&quot; ); List<Message> messages = query.list(); //Retornando a quantidade de mensagens encontradas System. out .println(messages.size() +  &quot; message(s) found:&quot; ); //Retornando as mensagens encontradas for  (Message msg : messages) { System. out .println(msg.getText()); } newTransaction.commit(); newSession.close(); HibernateUtil.shutdown();
Objetos Utilizados ,[object Object],[object Object],[object Object],[object Object]
Dirty Checking e Cascade Session thirdSession =    HibernateUtil.getSessionFactory().openSession(); Transaction thirdTransaction = thirdSession.beginTransaction(); // recuperando a mensagem message = (Message) thirdSession.get(Message. class , msgId); //Alterando o texto message.setText( &quot;Greetings Earthling&quot; ); //Criando uma nova mensagem e associando à antiga message.setNextMessage( new  Message( &quot;Take me to your leader&quot; )); thirdTransaction.commit(); thirdSession.close(); HibernateUtil.shutdown();
Dirty Checking e Cascade ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Metadados ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Porque não usar XML ,[object Object],[object Object],[object Object],[object Object],[object Object]
Metadados com Annotations ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeando Propriedades ,[object Object],[object Object],[object Object],[object Object],[object Object]
@Column ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeando Propriedades: Tipos
Mapeando Propriedades: Tipos
Datas ,[object Object],[object Object],[object Object],@Temporal (TemporalType. DATE ) private  Date  date1 ; @Temporal (TemporalType. TIME ) private  Date  date2 ; @Temporal (TemporalType. TIMESTAMP ) private  Date  date3 ;
Identidade das Entidades ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Identidade das Entidades ,[object Object],[object Object],[object Object]
Adicionando um Identificador ,[object Object],[object Object],@Entity @Table (name= &quot;CATEGORY&quot; ) public   class  Category { @Id @GeneratedValue (strategy = GenerationType. AUTO ) @Column (name =  &quot;CATEGORY_ID&quot; ) private  Long  id ; public  Long getId() {  return   id ; } }
Escolhendo a chave primária ,[object Object],[object Object],[object Object],[object Object],[object Object]
Escolhendo a chave primária ,[object Object],[object Object],[object Object],[object Object]
Escolhendo a chave primária ,[object Object],[object Object],[object Object],[object Object]
Geração automática de chaves ,[object Object],[object Object]
Estratégias ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Estratégias ,[object Object],[object Object],[object Object],[object Object]
Estratégias ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeando Componentes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeando Componentes
Mapeando Componentes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeando Componentes ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeando Componentes @Embeddable public   class  Address { @Column (name =  &quot;ADDRESS_STREET&quot; , nullable =  false ) private  String  street ; @Column (name =  &quot;ADDRESS_CITY&quot; , nullable =  false ) private  String  city ; //gets e sets... }
Mapeando Componentes @Entity @Table (name =  &quot;USERS&quot; ) public   class  User { @Id @GeneratedValue (strategy=GenerationType. AUTO ) private  Long  id ; private  String  name ; private  String  email ; private  Address  address ; //gets e sets }
Mapeando Herança ,[object Object],[object Object],[object Object]
Estratégias ,[object Object],[object Object],[object Object],[object Object]
Uma tabela por Classe Concreta: Modelagem
Uma tabela por Classe Concreta ,[object Object],[object Object],[object Object],[object Object],[object Object]
Uma tabela por Classe Concreta ,[object Object],[object Object],[object Object],[object Object],select CREDIT_CARD_ID, OWNER, NUMBER, EXP_MONTH, EXP_YEAR ... from CREDIT_CARD select BANK_ACCOUNT_ID, OWNER, ACCOUNT, BANKNAME, ... from BANK_ACCOUNT
Mapeando a Superclasse ,[object Object],@MappedSuperclass public   abstract   class  BillingDetails { @Column (name =  &quot;OWNER&quot; , nullable =  false ) private  String  owner ; //gets e sets... }
Mapeando as Subclasses ,[object Object],@Entity public   class  BankAccount  extends  BillingDetails{ @Id @GeneratedValue private  Long  id ; private  Integer  account ; private  String  bank ; }
Mapeando as Subclasses ,[object Object],[object Object],@Entity @AttributeOverride (name =  &quot;owner&quot; , column =  @Column (name =  &quot;CC_OWNER&quot; , nullable =  false )) public   class  CreditCard  extends  BillingDetails { @Id @GeneratedValue private  Long  id ; private  String  number ; }
Uma tabela por Classe Concreta: Union ,[object Object],[object Object],[object Object],[object Object]
Mapeando a Super Classe ,[object Object],@Entity @Inheritance (strategy = InheritanceType. TABLE_PER_CLASS ) public   class  BillingDetails { @Id   @ GeneratedValue @Column (name =  &quot;BILLING_DETAILS_ID&quot; ) private  Long  id  =  null ; @Column (name =  &quot;OWNER&quot; , nullable =  false ) private  String  owner ; }
Mapeando as Subclasses ,[object Object],[object Object],@Entity public   class  CreditCard  extends  BillingDetails{ @Column (name =  &quot;CC_NUMBER&quot; ) private  String  number ; }
Tabela por Hierarquia
Tabela por Hierarquia ,[object Object],[object Object],[object Object],[object Object],[object Object]
Tabela por Hierarquia ,[object Object],[object Object],[object Object],[object Object]
Mapeando a Superclasse ,[object Object],@Entity @Inheritance (strategy = InheritanceType. SINGLE_TABLE ) public   abstract   class  BillingDetails { @Id   @GeneratedValue @Column (name =  &quot;BILLING_DETAILS_ID&quot; ) private  Long  id  =  null ; @Column (name =  &quot;OWNER&quot; , nullable =  false ) private  String  owner ; }
Tabela por classe
Tabela por classe ,[object Object],[object Object],[object Object],[object Object]
Tabela por classe ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeando a Superclasse ,[object Object],@Entity @Inheritance (strategy = InheritanceType. JOINED ) public   abstract   class  BillingDetails { @Id   @GeneratedValue @Column (name =  &quot;BILLING_DETAILS_ID&quot; ) private  Long  id  =  null ; @Column (name =  &quot;OWNER&quot; , nullable =  false ) private  String  owner ; }
Mapeando as Subclasses ,[object Object],@Entity public   class  CreditCard  extends  BillingDetails{ @Column (name =  &quot;CC_NUMBER&quot; ) private  String  number ; }
Escolhendo a melhor estratégia ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Escolhendo a Melhor Estratégia ,[object Object],[object Object],[object Object],[object Object],[object Object]
Mapeando coleções ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Coleção de tipos primitivos: Set ,[object Object],[object Object],[object Object]
Annotations ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Annotations ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classe Item @Entity public   class  Item { @Id @GeneratedValue @Column (name =  &quot;ITEM_ID&quot; ) private  Long  id ; private  String  name ; @CollectionOfElements @JoinTable (name =  &quot;ITEM_IMAGE&quot; , joinColumns =  @JoinColumn (name =  &quot;ITEM_ID&quot; )) @Column (name =  &quot;FILENAME&quot; , nullable =  false ) private  Set<String>  images  =  new  HashSet<String>(); }
Coleção de tipos primitivos: List ,[object Object],[object Object]
Classe Item ,[object Object],@Entity public   class  Item { ... @CollectionOfElements @JoinTable (name =  &quot;ITEM_IMAGE&quot; , joinColumns =  @JoinColumn (name  =  &quot;ITEM_ID&quot; )) @Column (name =  &quot;FILENAME&quot; , nullable =  false ) @IndexColumn (name =  &quot;POSITION&quot; ) private  List<String>  images  =  new  ArrayList<String>(); }
Coleção de tipos primitivos: Map ,[object Object],[object Object]
Classe Item ,[object Object],[object Object],@Entity public   class  Item { ... @CollectionOfElements @JoinTable (name =  &quot;ITEM_IMAGE&quot; , joinColumns =  @JoinColumn (name  =  &quot;ITEM_ID&quot; )) @Column (name =  &quot;FILENAME&quot; , nullable =  false ) @MapKey (columns =  @Column (name =  &quot;IMAGENAME&quot; )) private  Map<String, String>  images  =  new  HashMap<String,  String>(); }
Associação entre Entidades ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Implementando associações ,[object Object],[object Object],[object Object]
Associações Bidirecionais ,[object Object],[object Object]
Classe Category public   class  Category { private  String  name ; private  Category  parentCategory ; private  Set<Category>  childCategories  =  new   HashSet<Category>(); //gets e sets //... }
Mantendo a Consistência Category aParent =  new  Category(); Category aChild =  new  Category(); aChild.setParentCategory(aParent); aParent.getChildCategories().add(aChild);
Relacionamento Pai-Filho
Classe Bid ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classe Bid @Entity public   class  Bid { @Id @GeneratedValue @Column (name =  &quot;BID_ID&quot; ) private  Long  id ; private  Integer  amount ; @ManyToOne @JoinColumn (name =  &quot;ITEM_ID&quot; , nullable =  false ) private  Item  item ; }
Relacionamento Bidirecional ,[object Object],[object Object],[object Object],[object Object]
Relacionamento Bidirecional @Entity public   class  Item { @Id @GeneratedValue @Column (name =  &quot;ITEM_ID&quot; ) private  Long  id ; private  String  name ; @OneToMany (mappedBy =  &quot;item&quot; ) private  Set<Bid>  bids  =  new  HashSet<Bid>(); }
Relacionamento Bidirecional ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Relacionamento Bidirecional ,[object Object],[object Object],[object Object],[object Object],[object Object]
Relacionamento Bidirecional ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Relacionamento Bidirecional Bid bid =  new  Bid(); bid.setAmount(Integer. valueOf (1000)); Item item =  new  Item(); item.setName( &quot;computador&quot; ); bid.setItem(item); item.getBids(). add (bid); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); //O item tem que ser salvo primeiro session.save(item); session.save(bid);
Relacionamento One-to-One
One-to-One ,[object Object],[object Object],[object Object],[object Object]
Classe User @Entity @Table (name =  &quot;USERS&quot; ) public   class  User { @Id @GeneratedValue (strategy=GenerationType. AUTO ) private  Long  id ; private  String  name ; @OneToOne @JoinColumn (name =  &quot;SHIPPING_ADDRESS_ID&quot; ) private  Address  address ; }
Classe Address @Entity public   class  Address { @Id @GeneratedValue private  Long  id ; @Column (nullable =  false ) private  String  street ; @OneToOne (mappedBy =  &quot;address&quot; ) private  User  user ; }
Ralacionamento Many-to-Many
Many-to-Many ,[object Object],[object Object],[object Object],[object Object]
@JoinTable ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Classe Category @Entity public   class  Category { @Id @GeneratedValue @Column (name =  &quot;CATEGORY_ID&quot; ) private  Long  id ; private  String  name ; @ManyToMany @JoinTable (name =  &quot;CATEGORY_ITEM&quot; , joinColumns =  @JoinColumn (name =  &quot;CATEGORY_ID&quot; ), inverseJoinColumns =  @JoinColumn (name =  &quot;ITEM_ID&quot; )) private  Set<Item>  items  =  new  HashSet<Item>(); }
Classe Item @Entity public   class  Item { @Id @GeneratedValue @Column (name =  &quot;ITEM_ID&quot; ) private  Long  id ; private  String  name ; @ManyToMany (mappedBy =  &quot;items&quot; ) private  Set<Category>  categories  =  new   HashSet<Category>(); }
Polimorfismo e LazyLoading ,[object Object],[object Object],[object Object],[object Object]
Associações: Polimorfismo
Entidade User @Entity @Table (name =  &quot;USERS&quot; ) public   class  User { @Id@GeneratedValue private  Long  id ; @OneToOne (fetch = FetchType. LAZY ) @JoinColumn (name =  &quot;DEFAULT_BILLING_ID&quot; ) private  BillingDetails  defaultBilling ; }
Polimorfismo e LazyLoading User user = (User) session.get(User. class , userId); BillingDetails bd = user.getDefaultBilling(); CreditCard cc = (CreditCard) session.load(CreditCard. class , bd.getId()); System. out .println(cc.getNumber()); User user = (User) session.get(User. class , userId); BillingDetails billingDetails = user.getDefaultBilling(); //imprime false System. out .println(billingDetails  instanceof  CreditCard); //ClassCastException CreditCard creditCard = (CreditCard) billingDetails;
Ciclo de Vida dos Objetos ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Ciclo de Vida dos Objetos ,[object Object],[object Object],[object Object],[object Object]
Ciclo de Vida dos Objetos: Conceitos ,[object Object],[object Object],[object Object],[object Object]
Estado Transiente ,[object Object],[object Object],[object Object],[object Object],[object Object]
Estado Persistente ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Persistente ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Removido ,[object Object],[object Object],[object Object],[object Object],[object Object]
Desconectado ,[object Object],[object Object],[object Object],[object Object],[object Object]
Contexto de Persistência ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Dirty Checking Automático ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Cache de Primeiro Nível ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Cache de Primeiro Nível ,[object Object],[object Object]
Contexto Persistência: Escopo ,[object Object],[object Object],[object Object],[object Object],[object Object]
Uma  Session  por Requisição ,[object Object],[object Object],[object Object]
Uma  Session  por Requisição ,[object Object],[object Object],[object Object]
Objetos Desconectados
Unidade de Trabalho de Longa Duração ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Unidade de Trabalho de Longa Duração ,[object Object],[object Object]
Contexto expandido
Escopo limitado ao Contexto de Persistência Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); Long id = (Long) session.save( new  Message( &quot;Hibernate&quot; )); Message messageB = (Message) session.get(Message. class , id); Message messageC = (Message) session.get(Message. class , id); System. out .println(messageB.equals(messageC)); transaction.commit(); session.close(); Session session2 = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction2 = session2.beginTransaction(); Message messageD = (Message) session2.get(Message. class , id); System. out .println(messageC.equals(messageD));
Identidade de objetos Desconectados ,[object Object],[object Object],[object Object],[object Object]
equals() ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Chave de negócio ,[object Object],[object Object],[object Object]
Implementação public   boolean  equals(Object other) { if  (!(other  instanceof  User)){ return   false ; } User that = (User) other; return   this . name .equals(that.getName()); } public   int  hashCode() { return   this . name .hashCode(); }
Interagindo com o Hibernate ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Interagindo com o Hibernate ,[object Object],[object Object],[object Object],[object Object],[object Object]
Armazenando e Recuperando Objetos ,[object Object],Session session = sessionFactory.openSession(); Transaction transaction = session.beginTransaction(); ,[object Object],[object Object],[object Object],[object Object]
Armazenando um Objeto // Quando é instanciado, o item está no estado Transiente Item item =  new  Item(); item.setName( &quot;Item 1&quot; ); // um novo Session é aberto Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); // O item passa para o estado Persistente e fica associado //ao Session e ao Contexto de Persistência session.save(item); //As mundanças são sincronizadas com a base de dados transaction.commit(); //O Session é fechado e o Contexto de Persistência encerrado. //O item passa para o estado Desconectado session.close();
Armazenando um Objeto
Recuperando uma Entidade Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction tx = session.beginTransaction(); //Item é recuperado no estado Transiente Item item = (Item) session.load(Item. class ,  new  Long(1234)); // Item item = (Item) session.get(Item.class, new Long(1234)); tx.commit(); //Item passa para o estado Desconectado session.close();
Recuperando uma Entidade
Recuperando uma Entidade ,[object Object],[object Object],[object Object],[object Object],[object Object]
Modificando um Objeto Persistente ,[object Object],[object Object]
Modificando um Objeto Persistente Long id =  armazenarItem (); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction tx = session.beginTransaction(); Item item = (Item) session.get(Item. class , id); item.setName( &quot;Playstation&quot; ); //Dados sincronizados com a base de dados. Dirty Cheking automático tx.commit(); session.close();
Modificando um Objeto Persistente
De Persistente para Transiente Long id =  armazenarItem (); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction tx = session.beginTransaction(); //Item no estado Persistente Item item = (Item) session.load(Item. class , id); //Item no estado Removido session.delete(item); tx.commit(); //Item no estado Transiente session.close();
De Persistente para Transiente
Trabalhando com Objetos Desconectados ,[object Object],[object Object],[object Object],[object Object]
Reconectando um Objeto ,[object Object],[object Object],[object Object],[object Object]
Reconectando um Objeto Item item =  recuperarItem ( armazenarItem ()); item.setName( &quot;Novo nome&quot; ); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); session.update(item); item.setPrice(Integer. valueOf (114)); transaction.commit(); session.close();
Reconectando um Objeto
NonUniqueObjectException Long id =  armazenarItem (); Item item =  recuperarItem (id); item.setName( &quot;Novo nome&quot; ); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); Item item2 = (Item) session.get(Item. class , id); session.update(item); item.setPrice(Integer. valueOf (114)); transaction.commit(); session.close();
Realizando o merge() de um Objeto ,[object Object],[object Object],[object Object],[object Object]
Método merge() ,[object Object],[object Object],[object Object]
Método merge() Long id =  armazenarItem (); Item item =  recuperarItem (id); item.setName( &quot;Novo nome!!!&quot; ); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); Item item2 = (Item) session.get(Item. class , id); Item item3 = (Item) session.merge(item); transaction.commit(); session.close();
Método merge()
Persistência Transitiva ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Persistência Transitiva ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Cascade ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
org.hibernate.annotations.CascadeType ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
org.hibernate.annotations.CascadeType ,[object Object],[object Object],[object Object],[object Object]
Exercício
Consultas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Consultas ,[object Object],[object Object],[object Object],[object Object]
Consultas: Exemplos // Através de HQL session.createQuery( &quot;from Category c where c.name like 'Laptop%'&quot; ); // Utilizando-se Criteria session.createCriteria(Category. class ).add( Restrictions. like ( &quot;name&quot; ,  &quot;Laptop%&quot; )); // Através de SQL session.createSQLQuery( &quot;select {c.*} from CATEGORY {c} where NAME like 'Laptop%'&quot; ) .addEntity( &quot;c&quot; , Category. class );
Consultas ,[object Object],[object Object],[object Object],[object Object],[object Object]
Criando a Consulta ,[object Object],[object Object],[object Object],Query query = session.createQuery( &quot;from User&quot; ); Criteria criteria = session.createCriteria(User. class );
Adicionando Parâmetros à Consulta ,[object Object],[object Object],[object Object],[object Object],[object Object]
Adicionando Parâmetros pelo Nome ,[object Object],[object Object],String queryString =  &quot;from Item item where item.description like  :search&quot; ; Query q = session.createQuery(queryString).setString( &quot;search&quot; , searchString); String queryString =  &quot;from Item item&quot; +  &quot; where item.description like :search&quot; +  &quot; and item.date > :minDate&quot; ; Query q = session.createQuery(queryString).setString( &quot;search&quot; , searchString).setDate( &quot;minDate&quot; , mDate);
Adicionando Parâmetros pela Posição ,[object Object],[object Object],String queryString =  &quot;from Item item&quot; +  &quot; where item.description like ?&quot;  +  &quot; and item.date > ?&quot; ; Query q = session.createQuery(queryString).setString(0,  searchString).setDate(1, minDate);
Executando a Consulta ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Executando a Consulta Query query = session.createQuery( &quot;from User&quot; ); List<User> list = query.list(); for  (User user : list) { System. out .println(user.getName()); } Query query2 = session.createQuery( &quot;from User user where user.name =:name&quot; ).setString( &quot;name&quot; , &quot;SUNSP&quot; ); User user = (User) query2.uniqueResult(); System. out .println(user.getName());
Consultas Básicas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Consultas Polimórficas ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Restrições ,[object Object],[object Object],[object Object],[object Object]
Restrições ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],Comparações
Comparações ,[object Object],[object Object],[object Object],[object Object]
Comparações ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Comparações ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Comparações ,[object Object],[object Object],[object Object],[object Object],[object Object]
Ordenando o Resultado ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Junções ,[object Object],[object Object]
Inner Join ,[object Object],[object Object]
(left) Outer Join ,[object Object],[object Object]
Junção com HQL ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Join Implícito na Associação ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
Join Implícito na Associação ,[object Object],[object Object]
Join especificado na Cláusula FROM ,[object Object],[object Object],[object Object],[object Object],[object Object]
Join especificado na Cláusula FROM ,[object Object],[object Object],[object Object],[object Object]
Outer Joins ,[object Object],[object Object],[object Object],[object Object],[object Object]
Comparando Identificadores ,[object Object],[object Object],[object Object],[object Object],[object Object]
Comparando Identificadores ,[object Object],Query query = session.createQuery( &quot;from Item i where  i.seller = :seller&quot; ); query.setEntity( &quot;seller&quot; , user);
FIM... ,[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]

Más contenido relacionado

La actualidad más candente

Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto AdapterMatheus Andrade
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"sbcars
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologiaselliando dias
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Adriano Teixeira de Souza
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: AdapterMessias Batista
 
Egenharia de Software Orientado a Aspectos
Egenharia de Software Orientado a AspectosEgenharia de Software Orientado a Aspectos
Egenharia de Software Orientado a Aspectosdyegoitallo
 
ODI Series - Treinamento
ODI Series - TreinamentoODI Series - Treinamento
ODI Series - TreinamentoCaio Lima
 
Php Conf08 Enterprise Patterns
Php Conf08 Enterprise PatternsPhp Conf08 Enterprise Patterns
Php Conf08 Enterprise PatternsWildtech
 
Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweightMateus Amaral
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a AspectosRicardo Terra
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelRyan Padilha
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetosPaulo Carvalho
 
Apresentação Modelo de Gestão de dados para sistemas Colaborativos
Apresentação Modelo de Gestão de dados para sistemas ColaborativosApresentação Modelo de Gestão de dados para sistemas Colaborativos
Apresentação Modelo de Gestão de dados para sistemas ColaborativosMozart Dornelles Claret
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemassauloroos01
 

La actualidad más candente (20)

Padrão De Projeto Adapter
Padrão De Projeto AdapterPadrão De Projeto Adapter
Padrão De Projeto Adapter
 
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
Palest"Tecnologias para Desenvolvimento Baseado em Componentes"
 
Componentes
ComponentesComponentes
Componentes
 
A Linguagem UML
A Linguagem UMLA Linguagem UML
A Linguagem UML
 
Integração de Tecnologias
Integração de TecnologiasIntegração de Tecnologias
Integração de Tecnologias
 
Design Patterns - Adapter e Decorator
Design Patterns - Adapter e DecoratorDesign Patterns - Adapter e Decorator
Design Patterns - Adapter e Decorator
 
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...Paradigmas de Linguagens de Programação - Modularização, componentização e re...
Paradigmas de Linguagens de Programação - Modularização, componentização e re...
 
Padrões de Projeto: Adapter
Padrões de Projeto: AdapterPadrões de Projeto: Adapter
Padrões de Projeto: Adapter
 
Egenharia de Software Orientado a Aspectos
Egenharia de Software Orientado a AspectosEgenharia de Software Orientado a Aspectos
Egenharia de Software Orientado a Aspectos
 
ODI Series - Treinamento
ODI Series - TreinamentoODI Series - Treinamento
ODI Series - Treinamento
 
Php Conf08 Enterprise Patterns
Php Conf08 Enterprise PatternsPhp Conf08 Enterprise Patterns
Php Conf08 Enterprise Patterns
 
Seminário flyweight
Seminário flyweightSeminário flyweight
Seminário flyweight
 
Programação Orientada a Aspectos
Programação Orientada a AspectosProgramação Orientada a Aspectos
Programação Orientada a Aspectos
 
Hibernate
HibernateHibernate
Hibernate
 
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e FlexívelDesign Pattern MVC – Arquitetura de Software Coesa e Flexível
Design Pattern MVC – Arquitetura de Software Coesa e Flexível
 
Java programação orientada a objetos
Java   programação orientada a objetosJava   programação orientada a objetos
Java programação orientada a objetos
 
Introdução à linguagem UML
Introdução à linguagem UMLIntrodução à linguagem UML
Introdução à linguagem UML
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
Apresentação Modelo de Gestão de dados para sistemas Colaborativos
Apresentação Modelo de Gestão de dados para sistemas ColaborativosApresentação Modelo de Gestão de dados para sistemas Colaborativos
Apresentação Modelo de Gestão de dados para sistemas Colaborativos
 
Modelagem de sistemas
Modelagem de sistemasModelagem de sistemas
Modelagem de sistemas
 

Destacado

Balanced vegetarian diet
Balanced vegetarian diet Balanced vegetarian diet
Balanced vegetarian diet nutrijyoti
 
ALM for CA Plex and CA 2E
ALM for CA Plex and CA 2EALM for CA Plex and CA 2E
ALM for CA Plex and CA 2EADC Austin Tech
 
Politicas eib nov 2011 2012
Politicas eib nov 2011 2012Politicas eib nov 2011 2012
Politicas eib nov 2011 2012nolbertjuli
 
Nerve injuries /certified fixed orthodontic courses by Indian dental academy
Nerve injuries /certified fixed orthodontic courses by Indian dental academy Nerve injuries /certified fixed orthodontic courses by Indian dental academy
Nerve injuries /certified fixed orthodontic courses by Indian dental academy Indian dental academy
 
Receita de ano novo – Carlos Drummond de Andrade e MonkeyBusiness
Receita de ano novo – Carlos Drummond de Andrade e MonkeyBusinessReceita de ano novo – Carlos Drummond de Andrade e MonkeyBusiness
Receita de ano novo – Carlos Drummond de Andrade e MonkeyBusinessMonkeyBusiness
 
Coffee Café Sample Page Layout Presentation
Coffee Café Sample Page Layout PresentationCoffee Café Sample Page Layout Presentation
Coffee Café Sample Page Layout Presentationmshark71
 
Fashion 2.0. exploring current social media trends from fashion business pers...
Fashion 2.0. exploring current social media trends from fashion business pers...Fashion 2.0. exploring current social media trends from fashion business pers...
Fashion 2.0. exploring current social media trends from fashion business pers...Sanna Ketonen-Oksi
 
Explorando Analysis Services: Power Pivot, Tabular y Multidimensional
Explorando Analysis Services: Power Pivot, Tabular y MultidimensionalExplorando Analysis Services: Power Pivot, Tabular y Multidimensional
Explorando Analysis Services: Power Pivot, Tabular y MultidimensionalSpanishPASSVC
 
Operaciones de pesca y re intervencion
Operaciones de pesca y re intervencionOperaciones de pesca y re intervencion
Operaciones de pesca y re intervencionMagnus Fernandez
 
OKR - Objetivos e Resultados Chave
OKR - Objetivos e Resultados ChaveOKR - Objetivos e Resultados Chave
OKR - Objetivos e Resultados ChaveCarlos Freitas
 
Ffhs seco videokonferenz_business_modeling_matthias_pohle_20141008_v1_final
Ffhs seco videokonferenz_business_modeling_matthias_pohle_20141008_v1_finalFfhs seco videokonferenz_business_modeling_matthias_pohle_20141008_v1_final
Ffhs seco videokonferenz_business_modeling_matthias_pohle_20141008_v1_finalMatthias Pohle
 
Haustuerkatalog Sternstunden von Fenster-Schmidinger / Doors
Haustuerkatalog Sternstunden von Fenster-Schmidinger / DoorsHaustuerkatalog Sternstunden von Fenster-Schmidinger / Doors
Haustuerkatalog Sternstunden von Fenster-Schmidinger / DoorsFlorian Schmidinger
 

Destacado (20)

Balanced vegetarian diet
Balanced vegetarian diet Balanced vegetarian diet
Balanced vegetarian diet
 
ALM for CA Plex and CA 2E
ALM for CA Plex and CA 2EALM for CA Plex and CA 2E
ALM for CA Plex and CA 2E
 
Politicas eib nov 2011 2012
Politicas eib nov 2011 2012Politicas eib nov 2011 2012
Politicas eib nov 2011 2012
 
Nerve injuries /certified fixed orthodontic courses by Indian dental academy
Nerve injuries /certified fixed orthodontic courses by Indian dental academy Nerve injuries /certified fixed orthodontic courses by Indian dental academy
Nerve injuries /certified fixed orthodontic courses by Indian dental academy
 
Comande oss
Comande ossComande oss
Comande oss
 
Receita de ano novo – Carlos Drummond de Andrade e MonkeyBusiness
Receita de ano novo – Carlos Drummond de Andrade e MonkeyBusinessReceita de ano novo – Carlos Drummond de Andrade e MonkeyBusiness
Receita de ano novo – Carlos Drummond de Andrade e MonkeyBusiness
 
Coffee Café Sample Page Layout Presentation
Coffee Café Sample Page Layout PresentationCoffee Café Sample Page Layout Presentation
Coffee Café Sample Page Layout Presentation
 
Пояснительная записка
Пояснительная запискаПояснительная записка
Пояснительная записка
 
Fashion 2.0. exploring current social media trends from fashion business pers...
Fashion 2.0. exploring current social media trends from fashion business pers...Fashion 2.0. exploring current social media trends from fashion business pers...
Fashion 2.0. exploring current social media trends from fashion business pers...
 
Explorando Analysis Services: Power Pivot, Tabular y Multidimensional
Explorando Analysis Services: Power Pivot, Tabular y MultidimensionalExplorando Analysis Services: Power Pivot, Tabular y Multidimensional
Explorando Analysis Services: Power Pivot, Tabular y Multidimensional
 
Operaciones de pesca y re intervencion
Operaciones de pesca y re intervencionOperaciones de pesca y re intervencion
Operaciones de pesca y re intervencion
 
Online Marketing BootCamp
Online Marketing BootCampOnline Marketing BootCamp
Online Marketing BootCamp
 
OKR - Objetivos e Resultados Chave
OKR - Objetivos e Resultados ChaveOKR - Objetivos e Resultados Chave
OKR - Objetivos e Resultados Chave
 
Qfd
QfdQfd
Qfd
 
Ffhs seco videokonferenz_business_modeling_matthias_pohle_20141008_v1_final
Ffhs seco videokonferenz_business_modeling_matthias_pohle_20141008_v1_finalFfhs seco videokonferenz_business_modeling_matthias_pohle_20141008_v1_final
Ffhs seco videokonferenz_business_modeling_matthias_pohle_20141008_v1_final
 
Haustuerkatalog Sternstunden von Fenster-Schmidinger / Doors
Haustuerkatalog Sternstunden von Fenster-Schmidinger / DoorsHaustuerkatalog Sternstunden von Fenster-Schmidinger / Doors
Haustuerkatalog Sternstunden von Fenster-Schmidinger / Doors
 
Shopleiter Magazin Nr. 4 - SEO-, SEM- und eCommerce-Tipps
Shopleiter Magazin Nr. 4 - SEO-, SEM- und eCommerce-TippsShopleiter Magazin Nr. 4 - SEO-, SEM- und eCommerce-Tipps
Shopleiter Magazin Nr. 4 - SEO-, SEM- und eCommerce-Tipps
 
Team Jugendarbeit_Programm 2011.pdf
Team Jugendarbeit_Programm 2011.pdfTeam Jugendarbeit_Programm 2011.pdf
Team Jugendarbeit_Programm 2011.pdf
 
Hibernate
HibernateHibernate
Hibernate
 
JPA - Java Persistence API
JPA - Java Persistence APIJPA - Java Persistence API
JPA - Java Persistence API
 

Similar a Persistência Java com Hibernate

Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAAricelio Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Adriano Teixeira de Souza
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBAdriano Teixeira de Souza
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoÉberli Cabistani Riella
 
Apresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity FrameworkApresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity FrameworkMatteus Barbosa
 
Desenvolvendo Produtos Com Java EE
Desenvolvendo Produtos Com Java EEDesenvolvendo Produtos Com Java EE
Desenvolvendo Produtos Com Java EEelliando dias
 
Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoraçãoelliando dias
 
01 Orientacao A Objetos Programacao
01   Orientacao A Objetos   Programacao01   Orientacao A Objetos   Programacao
01 Orientacao A Objetos Programacaotaniamaciel
 
ZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoMarcos Bezerra
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Eric Gallardo
 
Odi tutorial glossário e termos técnicos
Odi tutorial   glossário e termos técnicosOdi tutorial   glossário e termos técnicos
Odi tutorial glossário e termos técnicosCaio Lima
 
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RADExtreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RADCesar Romero
 

Similar a Persistência Java com Hibernate (20)

Data accesss conect
Data accesss conectData accesss conect
Data accesss conect
 
Dao
DaoDao
Dao
 
Padrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAAPadrões de projeto - Martin Fowler - P of EAA
Padrões de projeto - Martin Fowler - P of EAA
 
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
Sistemas Distribuídos - Comunicação Distribuída - EJB (JBoss 7)
 
Sistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJBSistemas Distribuídos - Comunicação Distribuída - EJB
Sistemas Distribuídos - Comunicação Distribuída - EJB
 
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo CustoJava No Setor Público: Produtividade, Flexibilidade e Baixo Custo
Java No Setor Público: Produtividade, Flexibilidade e Baixo Custo
 
Palestra Sobre REST
Palestra Sobre RESTPalestra Sobre REST
Palestra Sobre REST
 
Jsp+Jdbc+Servlets
Jsp+Jdbc+ServletsJsp+Jdbc+Servlets
Jsp+Jdbc+Servlets
 
teste86940.78038637294
teste86940.78038637294teste86940.78038637294
teste86940.78038637294
 
Apresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity FrameworkApresentação em Projeto de Sistemas – Entity Framework
Apresentação em Projeto de Sistemas – Entity Framework
 
Desenvolvendo Produtos Com Java EE
Desenvolvendo Produtos Com Java EEDesenvolvendo Produtos Com Java EE
Desenvolvendo Produtos Com Java EE
 
Hibernate conceitos
Hibernate conceitosHibernate conceitos
Hibernate conceitos
 
Aula1
Aula1Aula1
Aula1
 
Banco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e RefatoraçãoBanco de Dados Ágeis e Refatoração
Banco de Dados Ágeis e Refatoração
 
01 Orientacao A Objetos Programacao
01   Orientacao A Objetos   Programacao01   Orientacao A Objetos   Programacao
01 Orientacao A Objetos Programacao
 
ZF Básico - 1. Introdução
ZF Básico - 1. IntroduçãoZF Básico - 1. Introdução
ZF Básico - 1. Introdução
 
ORM e EF
ORM e EFORM e EF
ORM e EF
 
Treinamento ASP.NET 2014
Treinamento ASP.NET 2014Treinamento ASP.NET 2014
Treinamento ASP.NET 2014
 
Odi tutorial glossário e termos técnicos
Odi tutorial   glossário e termos técnicosOdi tutorial   glossário e termos técnicos
Odi tutorial glossário e termos técnicos
 
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RADExtreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
Extreme 360 Arquitetura para Aplicações Delphi Spring4D - OOP e RAD
 

Persistência Java com Hibernate

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28.
  • 29.
  • 30.  
  • 35. Criando uma entidade @Entity @Table (name = &quot;MESSAGES&quot; ) public class Message { @Id @GeneratedValue @Column (name = &quot;MESSAGE_ID&quot; ) private Long id ; @Column (name = &quot;MESSAGE_TEXT&quot; ) private String text ; @ManyToOne (cascade = CascadeType. ALL ) @JoinColumn (name = &quot;NEXT_MESSAGE_ID&quot; ) private Message nextMessage ; private Message() {} public Message(String text) { this . text = text; } //gets e sets }
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42. hibernate.cfg.xml < hibernate-configuration > < session-factory > <!-- Parâmetros de acesso a base de dados --> < property name = &quot;connection.driver_class&quot; > org.postgresql.Driver </ property > < property name = &quot;connection.url&quot; > jdbc:postgresql://localhost:5432/curso </ property > < property name = &quot;connection.username&quot; > postgresql </ property > < property name = &quot;connection.password&quot; > postgresql </ property > < property name = &quot;dialect&quot; > org.hibernate.dialect.PostgreSQLDialect </ property > ...
  • 43. hibernate.cfg.xml ... <!-- Configuração do Pool de conexões --> < property name = &quot;c3p0.min_size&quot; > 5 </ property > < property name = &quot;c3p0.max_size&quot; > 20 </ property > < property name = &quot;c3p0.timeout&quot; > 300 </ property > < property name = &quot;c3p0.max_statements&quot; > 50 </ property > < property name = &quot;c3p0.idle_test_period&quot; > 3000 </ property > <!-- Exibe no console o SQL gerado pelo hibernate--> < property name = &quot;show_sql&quot; > true </ property > <!-- Cria e executa a DDL (tabelas, colunas, etc...)--> < property name = &quot;hbm2ddl.auto&quot; > create </ property > <!-- Informa as Entidades da aplicação --> < mapping class = &quot;br.gov.serpro.curso.hibernate.exemplo1.Message&quot; /> </ session-factory > </ hibernate-configuration >
  • 44. Armazenando uma Mensagem //Obtendo o Session Session session = HibernateUtil.getSessionFactory().openSession(); //Iniciando a transação Transaction tx = session.beginTransaction(); // Criando uma mensagem Message message = new Message( &quot;Hello World&quot; ); // Salvando a Mensagem Long msgId = (Long) session.save(message); //Fazendo o commit da transação tx.commit(); //Fechando o Session session.close(); HibernateUtil.shutdown();
  • 45.
  • 46.
  • 47. HibernateUtil public class HibernateUtil { private static SessionFactory sessionFactory ; static { sessionFactory = new AnnotationConfiguration().configure() .buildSessionFactory(); } public static SessionFactory getSessionFactory() { return sessionFactory ; } public static void shutdown() { getSessionFactory ().close(); } }
  • 48. Recuperando as Mensagens Session newSession = HibernateUtil.getSessionFactory().openSession(); Transaction newTransaction = newSession.beginTransaction(); //Criando e executando uma consulta Query query = newSession .createQuery( &quot;from Message m order by m.text asc&quot; ); List<Message> messages = query.list(); //Retornando a quantidade de mensagens encontradas System. out .println(messages.size() + &quot; message(s) found:&quot; ); //Retornando as mensagens encontradas for (Message msg : messages) { System. out .println(msg.getText()); } newTransaction.commit(); newSession.close(); HibernateUtil.shutdown();
  • 49.
  • 50. Dirty Checking e Cascade Session thirdSession = HibernateUtil.getSessionFactory().openSession(); Transaction thirdTransaction = thirdSession.beginTransaction(); // recuperando a mensagem message = (Message) thirdSession.get(Message. class , msgId); //Alterando o texto message.setText( &quot;Greetings Earthling&quot; ); //Criando uma nova mensagem e associando à antiga message.setNextMessage( new Message( &quot;Take me to your leader&quot; )); thirdTransaction.commit(); thirdSession.close(); HibernateUtil.shutdown();
  • 51.
  • 52.
  • 53.
  • 54.
  • 55.
  • 56.
  • 59.
  • 60.
  • 61.
  • 62.
  • 63.
  • 64.
  • 65.
  • 66.
  • 67.
  • 68.
  • 69.
  • 70.
  • 72.
  • 73.
  • 74. Mapeando Componentes @Embeddable public class Address { @Column (name = &quot;ADDRESS_STREET&quot; , nullable = false ) private String street ; @Column (name = &quot;ADDRESS_CITY&quot; , nullable = false ) private String city ; //gets e sets... }
  • 75. Mapeando Componentes @Entity @Table (name = &quot;USERS&quot; ) public class User { @Id @GeneratedValue (strategy=GenerationType. AUTO ) private Long id ; private String name ; private String email ; private Address address ; //gets e sets }
  • 76.
  • 77.
  • 78. Uma tabela por Classe Concreta: Modelagem
  • 79.
  • 80.
  • 81.
  • 82.
  • 83.
  • 84.
  • 85.
  • 86.
  • 88.
  • 89.
  • 90.
  • 92.
  • 93.
  • 94.
  • 95.
  • 96.
  • 97.
  • 98.
  • 99.
  • 100.
  • 101.
  • 102. Classe Item @Entity public class Item { @Id @GeneratedValue @Column (name = &quot;ITEM_ID&quot; ) private Long id ; private String name ; @CollectionOfElements @JoinTable (name = &quot;ITEM_IMAGE&quot; , joinColumns = @JoinColumn (name = &quot;ITEM_ID&quot; )) @Column (name = &quot;FILENAME&quot; , nullable = false ) private Set<String> images = new HashSet<String>(); }
  • 103.
  • 104.
  • 105.
  • 106.
  • 107.
  • 108.
  • 109.
  • 110. Classe Category public class Category { private String name ; private Category parentCategory ; private Set<Category> childCategories = new HashSet<Category>(); //gets e sets //... }
  • 111. Mantendo a Consistência Category aParent = new Category(); Category aChild = new Category(); aChild.setParentCategory(aParent); aParent.getChildCategories().add(aChild);
  • 113.
  • 114. Classe Bid @Entity public class Bid { @Id @GeneratedValue @Column (name = &quot;BID_ID&quot; ) private Long id ; private Integer amount ; @ManyToOne @JoinColumn (name = &quot;ITEM_ID&quot; , nullable = false ) private Item item ; }
  • 115.
  • 116. Relacionamento Bidirecional @Entity public class Item { @Id @GeneratedValue @Column (name = &quot;ITEM_ID&quot; ) private Long id ; private String name ; @OneToMany (mappedBy = &quot;item&quot; ) private Set<Bid> bids = new HashSet<Bid>(); }
  • 117.
  • 118.
  • 119.
  • 120. Relacionamento Bidirecional Bid bid = new Bid(); bid.setAmount(Integer. valueOf (1000)); Item item = new Item(); item.setName( &quot;computador&quot; ); bid.setItem(item); item.getBids(). add (bid); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); //O item tem que ser salvo primeiro session.save(item); session.save(bid);
  • 122.
  • 123. Classe User @Entity @Table (name = &quot;USERS&quot; ) public class User { @Id @GeneratedValue (strategy=GenerationType. AUTO ) private Long id ; private String name ; @OneToOne @JoinColumn (name = &quot;SHIPPING_ADDRESS_ID&quot; ) private Address address ; }
  • 124. Classe Address @Entity public class Address { @Id @GeneratedValue private Long id ; @Column (nullable = false ) private String street ; @OneToOne (mappedBy = &quot;address&quot; ) private User user ; }
  • 126.
  • 127.
  • 128. Classe Category @Entity public class Category { @Id @GeneratedValue @Column (name = &quot;CATEGORY_ID&quot; ) private Long id ; private String name ; @ManyToMany @JoinTable (name = &quot;CATEGORY_ITEM&quot; , joinColumns = @JoinColumn (name = &quot;CATEGORY_ID&quot; ), inverseJoinColumns = @JoinColumn (name = &quot;ITEM_ID&quot; )) private Set<Item> items = new HashSet<Item>(); }
  • 129. Classe Item @Entity public class Item { @Id @GeneratedValue @Column (name = &quot;ITEM_ID&quot; ) private Long id ; private String name ; @ManyToMany (mappedBy = &quot;items&quot; ) private Set<Category> categories = new HashSet<Category>(); }
  • 130.
  • 132. Entidade User @Entity @Table (name = &quot;USERS&quot; ) public class User { @Id@GeneratedValue private Long id ; @OneToOne (fetch = FetchType. LAZY ) @JoinColumn (name = &quot;DEFAULT_BILLING_ID&quot; ) private BillingDetails defaultBilling ; }
  • 133. Polimorfismo e LazyLoading User user = (User) session.get(User. class , userId); BillingDetails bd = user.getDefaultBilling(); CreditCard cc = (CreditCard) session.load(CreditCard. class , bd.getId()); System. out .println(cc.getNumber()); User user = (User) session.get(User. class , userId); BillingDetails billingDetails = user.getDefaultBilling(); //imprime false System. out .println(billingDetails instanceof CreditCard); //ClassCastException CreditCard creditCard = (CreditCard) billingDetails;
  • 134.
  • 135.
  • 136.
  • 137.
  • 138.
  • 139.
  • 140.
  • 141.
  • 142.
  • 143.
  • 144.
  • 145.
  • 146.
  • 147.
  • 148.
  • 150.
  • 151.
  • 153. Escopo limitado ao Contexto de Persistência Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); Long id = (Long) session.save( new Message( &quot;Hibernate&quot; )); Message messageB = (Message) session.get(Message. class , id); Message messageC = (Message) session.get(Message. class , id); System. out .println(messageB.equals(messageC)); transaction.commit(); session.close(); Session session2 = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction2 = session2.beginTransaction(); Message messageD = (Message) session2.get(Message. class , id); System. out .println(messageC.equals(messageD));
  • 154.
  • 155.
  • 156.
  • 157. Implementação public boolean equals(Object other) { if (!(other instanceof User)){ return false ; } User that = (User) other; return this . name .equals(that.getName()); } public int hashCode() { return this . name .hashCode(); }
  • 158.
  • 159.
  • 160.
  • 161. Armazenando um Objeto // Quando é instanciado, o item está no estado Transiente Item item = new Item(); item.setName( &quot;Item 1&quot; ); // um novo Session é aberto Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); // O item passa para o estado Persistente e fica associado //ao Session e ao Contexto de Persistência session.save(item); //As mundanças são sincronizadas com a base de dados transaction.commit(); //O Session é fechado e o Contexto de Persistência encerrado. //O item passa para o estado Desconectado session.close();
  • 163. Recuperando uma Entidade Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction tx = session.beginTransaction(); //Item é recuperado no estado Transiente Item item = (Item) session.load(Item. class , new Long(1234)); // Item item = (Item) session.get(Item.class, new Long(1234)); tx.commit(); //Item passa para o estado Desconectado session.close();
  • 165.
  • 166.
  • 167. Modificando um Objeto Persistente Long id = armazenarItem (); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction tx = session.beginTransaction(); Item item = (Item) session.get(Item. class , id); item.setName( &quot;Playstation&quot; ); //Dados sincronizados com a base de dados. Dirty Cheking automático tx.commit(); session.close();
  • 168. Modificando um Objeto Persistente
  • 169. De Persistente para Transiente Long id = armazenarItem (); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction tx = session.beginTransaction(); //Item no estado Persistente Item item = (Item) session.load(Item. class , id); //Item no estado Removido session.delete(item); tx.commit(); //Item no estado Transiente session.close();
  • 170. De Persistente para Transiente
  • 171.
  • 172.
  • 173. Reconectando um Objeto Item item = recuperarItem ( armazenarItem ()); item.setName( &quot;Novo nome&quot; ); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); session.update(item); item.setPrice(Integer. valueOf (114)); transaction.commit(); session.close();
  • 175. NonUniqueObjectException Long id = armazenarItem (); Item item = recuperarItem (id); item.setName( &quot;Novo nome&quot; ); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); Item item2 = (Item) session.get(Item. class , id); session.update(item); item.setPrice(Integer. valueOf (114)); transaction.commit(); session.close();
  • 176.
  • 177.
  • 178. Método merge() Long id = armazenarItem (); Item item = recuperarItem (id); item.setName( &quot;Novo nome!!!&quot; ); Session session = HibernateUtil. getSessionFactory ().openSession(); Transaction transaction = session.beginTransaction(); Item item2 = (Item) session.get(Item. class , id); Item item3 = (Item) session.merge(item); transaction.commit(); session.close();
  • 180.
  • 181.
  • 182.
  • 183.
  • 184.
  • 186.
  • 187.
  • 188. Consultas: Exemplos // Através de HQL session.createQuery( &quot;from Category c where c.name like 'Laptop%'&quot; ); // Utilizando-se Criteria session.createCriteria(Category. class ).add( Restrictions. like ( &quot;name&quot; , &quot;Laptop%&quot; )); // Através de SQL session.createSQLQuery( &quot;select {c.*} from CATEGORY {c} where NAME like 'Laptop%'&quot; ) .addEntity( &quot;c&quot; , Category. class );
  • 189.
  • 190.
  • 191.
  • 192.
  • 193.
  • 194.
  • 195. Executando a Consulta Query query = session.createQuery( &quot;from User&quot; ); List<User> list = query.list(); for (User user : list) { System. out .println(user.getName()); } Query query2 = session.createQuery( &quot;from User user where user.name =:name&quot; ).setString( &quot;name&quot; , &quot;SUNSP&quot; ); User user = (User) query2.uniqueResult(); System. out .println(user.getName());
  • 196.
  • 197.
  • 198.
  • 199.
  • 200.
  • 201.
  • 202.
  • 203.
  • 204.
  • 205.
  • 206.
  • 207.
  • 208.
  • 209.
  • 210.
  • 211.
  • 212.
  • 213.
  • 214.
  • 215.
  • 216.
  • 217.