Pro032 - Aula 4 Tap

Embed Size (px)

Citation preview

  • 8/3/2019 Pro032 - Aula 4 Tap

    1/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    MAPEAMENTO BSICO DE ENTIDADES @TABLE, @ID,@ENTITY, @COLUMN, @GENERATEDVALUE, @TRANSIENT.

    As anotaes apresentadas a seguir pertencem ao pacote javax.persistence.

    @Entity

    Essa anotao significa que uma determinada classe uma entidade persistente. Se onome da entidade diferente do nome da tabela, ento a anotao @Table usada,caso contrario no necessrio utilizar.

    Exemplo:

    @Entity@Table(name="tb_aluno")publicclass Aluno implements Serializable

    @Table

    Utilizada em combinao com @Entity para definir que a classe de entidade tem umatabela prpria.

    A anotao @Table possui os atributos conforme abaixo:

    name(String) opcional e permite definir o nome desta tabela quando fordiferente do nome da classe.

    catalog(String) opcional e permite informar o catalogo da tabela.

    schema(String) opcional e permite informar qual o schema dessa tabela.

    uniqueConstraints opcional e permite colocar restries necessrias para a

    tabela.

    Exemplo:

    @Entity@Table(name="tb_aluno", schema="uniban")publicclass Aluno implements Serializable {

    1

  • 8/3/2019 Pro032 - Aula 4 Tap

    2/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    @Column

    Marca um atributo ou mtodo getter correspondente como um gerador de valor parauma coluna.

    A anotao @Column possui os atributos conforme abaixo:

    name(String) opcional e permite definir o nome desta coluna.

    columnDefinition(String) opcional e permite que fragmentos de cdigosSQL para gerar DDL para a coluna.

    insertable(boolean) opcional e permite informar se a coluna deve fazer partedo insert.

    length(int) opcional e define o tamanho da coluna.

    nullable(boolean) opcional e define se a coluna aceitar valores nulos.

    precision(int) opcional e define as casas decimais.

    scale(int) opcional define a escala para casas decimais.

    table(String) opcional e define o nome da tabela.

    unique(boolean) opcional e define se a coluna deve ter valor nico.

    updatable(boolean) opcional e permite informar se a coluna deve fazer parte

    do update.

    Exemplo

    @Column(name = "str_nome", nullable = false, length = 60)private String strNome;

    @Id

    Marca um atributo ou mtodo getter como identificador correspondendo chaveprimaria. Utilizado em conjunto com @Column quando a coluna possui nomeparticular.

    Exemplo

    @Id@Column(name = "id_aluno", nullable = false)privateintidAluno;

    2

  • 8/3/2019 Pro032 - Aula 4 Tap

    3/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    @GeneratedValue

    Utilizado em conjunto com @Id para definir a estratgia de gerao do identificadornas operaes de insero. Os valores provm da enumerao GenerationType:IDENTITY, SEQUENCE, TABLE e AUTO.

    A anotao @GeneratedValue possui os atributos conforme abaixo:

    generator(String) opcional e define o nome do gerador de chave primariapara usar no SequenceGenerator.

    strategy(String) opcional e define a estratgia de gerao da chaveprimaria(IDENTITY, SEQUENCE, TABLE e AUTO)

    Exemplo

    @Id@Column(name = "id_aluno", nullable = false)@GeneratedValue(strategy = GenerationType.IDENTITY)privateintidAluno;

    @Transient

    Marca um atributo ou mtodo getter como no participante das operaes depersistncia.

    Exemplo

    @Transientprivate String mensagem;

    @Version

    Essa anotao especifica o campo de verso ou de propriedade de uma classe deentidade que serve para bloqueio otimista. A verso usada para garantir aintegridade ao executar a operao de juno e para controle de simultaneidadeotimista.

    Exemplo

    @Versionprivateintversion;

    3

  • 8/3/2019 Pro032 - Aula 4 Tap

    4/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    Exemplo de Mapeamento:

    Tabela tb_aluno

    Criando nossa entidade e fazendo o mapeamento atravs de anotaes:

    Aluno.java

    package br.uniban.entity;

    import java.io.Serializable;

    import javax.persistence.Column;import javax.persistence.Entity;import javax.persistence.GeneratedValue;

    import javax.persistence.GenerationType;import javax.persistence.Id;import javax.persistence.Table;import javax.persistence.Transient;import javax.persistence.Version;

    @Entity@Table(name="tb_aluno", schema="uniban")publicclass Aluno implements Serializable {

    privatestaticfinallongserialVersionUID= 7451493081496319340L;

    @Id

    @Column(name = "id_aluno", nullable = false)@GeneratedValue(strategy = GenerationType.IDENTITY)privateintidAluno;

    @Column(name = "str_nome", nullable = false, length = 60)private String strNome;

    @Column(name = "str_endereco", nullable = false, length = 80)private String strEndereco;

    @Column(name = "str_telefone", nullable = true, length = 10)private String strTelefone;

    @Column(name = "str_rg", nullable = true, length = 15)private String strRg;

    @Versionprivateintversion;

    4

  • 8/3/2019 Pro032 - Aula 4 Tap

    5/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    public Aluno(){}

    public Aluno(int idAluno, String strNome, String strEndereco,String strTelefone, String strRg) {

    this.idAluno = idAluno;

    this.strNome = strNome;this.strEndereco = strEndereco;this.strTelefone = strTelefone;this.strRg = strRg;

    }

    public Aluno(String strNome, String strEndereco, String strTelefone,String strRg) {

    this.strNome = strNome;this.strEndereco = strEndereco;this.strTelefone = strTelefone;this.strRg = strRg;

    }

    publicint getIdAluno() {returnidAluno;

    }publicvoid setIdAluno(int idAluno) {

    this.idAluno = idAluno;}public String getStrNome() {

    returnstrNome;}publicvoid setStrNome(String strNome) {

    this.strNome = strNome;}

    public String getStrEndereco() {returnstrEndereco;

    }publicvoid setStrEndereco(String strEndereco) {

    this.strEndereco = strEndereco;}public String getStrTelefone() {

    returnstrTelefone;}publicvoid setStrTelefone(String strTelefone) {

    this.strTelefone = strTelefone;}public String getStrRg() {

    returnstrRg;}

    publicvoid setStrRg(String strRg) {this.strRg = strRg;

    }

    publicint getVersion() {returnversion;

    }

    publicvoid setVersion(int version) {this.version = version;

    }

    @Overridepublic String toString() {return"Aluno [idAluno=" + idAluno + ", strNome=" + strNome

    5

  • 8/3/2019 Pro032 - Aula 4 Tap

    6/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    + ", strEndereco=" + strEndereco + ", strTelefone="+ strTelefone + ", strRg=" + strRg + "]";

    }

    }

    persistence.xml

    org.hibernate.ejb.HibernatePersistence br.uniban.entity.Aluno

    JPAPersist.javapackage br.uniban.main;

    import javax.persistence.EntityManager;import javax.persistence.EntityManagerFactory;import javax.persistence.Persistence;

    import br.uniban.entity.Aluno;

    /*** @author fabiorener**/

    publicclass JPAPersist {

    /**

    6

  • 8/3/2019 Pro032 - Aula 4 Tap

    7/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    * @param args*/

    publicstaticvoid main(String[] args) {

    EntityManagerFactory emf =Persistence.createEntityManagerFactory("aula4PU");

    EntityManager em = emf.createEntityManager();

    try{em.getTransaction().begin();

    Aluno inc = new Aluno("Rodrigo Lisboa","Rua Lima Duarte,45","6543-6899","1234567");

    em.persist(inc);em.getTransaction().commit();

    }catch(Exception e){

    System.out.println(e.getMessage());}finally{

    em.close();}

    }

    }

    Exerccios de Fixao:

    1) Crie a entidade e faa o mapeamento usando anotaes para a tabela que estadefinida na imagem abaixo ?

    7

  • 8/3/2019 Pro032 - Aula 4 Tap

    8/8

    Tpicos Avanados de Programao - Ano:2011 Prof.Fbio Rener

    2) Crie a unidade de persistncia(PU) com sua nova entidade ?

    3) Lista dois benefcios que temos ao usar JPA ?

    4) Crie uma classe que faa a persistncia de entidade que mapeia a tabelatb_professor.

    8