Existe alguem que conheça muuuito de JPA ???
Qual é a especificação do JPA com relacao ao JBoss 5 ???
Devo usar JPA c/ Hibernate … ou utilizar Hibernate puro ???
Obrigado.
Existe alguem que conheça muuuito de JPA ???
Qual é a especificação do JPA com relacao ao JBoss 5 ???
Devo usar JPA c/ Hibernate … ou utilizar Hibernate puro ???
Obrigado.
não sei se conheço tanto qto vc espera. rs
utilizo jpa em dois projeto. um dos projetos uso toplink+JPA e no outro hibernate+JPA. No passado utilizei num projeto o Hibernate puro. Conclusão, todas essas opções são praticamente identicas. Fica a gosto do fregues.
abraços
não sei se conheço tanto qto vc espera. rsutilizo jpa em dois projeto. um dos projetos uso toplink+JPA e no outro hibernate+JPA. No passado utilizei num projeto o Hibernate puro. Conclusão, todas essas opções são praticamente identicas. Fica a gosto do fregues.
abraços
vc já tem uma certa experencia … legal …
como que vc utiliza chave composta ???
Nos casos da Anotação @OneToMany … vc cria uma tabela associativa ou manda o id da classe para outra table ??? o que é melhor ??
vlw cara
como que vc utiliza chave composta???
tenho uma classe que define cada chave composta, por exemplo:
public class ProdutoPK implements Serializable {
/** Atributo que mapeia o campo CD_MDUPR. */
@Id
@Column(name="CD_MDUPR",nullable=false)
public Long cdMdupr;
/** Atributo que mapeia o campo SQ_CRIVO_RENOV. */
@Id
@Column(name="SQ_RENOV",nullable=false)
public Long sqRenov;
/**
* Construtor da classe.
*/
public ProdutoPK () {
}
/**
* Construtor da classe.
* @param cdMdupr valor do atributo cdMdupr
* @param sqRenov valor do atributo sqRenov
*/
public ProdutoPK (Long cdMdupr,Long sqRenov) {
this.cdMdupr = cdMdupr;
this.sqRenov= sqRenov;
}
public boolean equals(Object other) {
if(other instanceof ProdutoPK ) {
final ProdutoPK pk = (ProdutoPK ) other;
boolean ret = (pk.cdMdupr.equals(cdMdupr) && pk.sqRenov.equals(sqCrivoRenov));
return ret;
}
return false;
}
public int hashCode() {
return cdMdupr.hashCode() ^ sqRenov.hashCode();
}
}
Nos casos da Anotação @OneToMany ... vc cria uma tabela associativa ou manda o id da classe para outra table ??? o que é melhor ??Particularmente prefiro mapear minhas entidades sem relacionamento por questão de performance. Mas olhando de fora, relaçoes @OneToMany eu colocaria a entidade relacionada como um atributo da classe.
acho que é isso
Olá,
Interessante o teu comment. Eu uso hibernate com lazy load e sempre me pareceu bem rápido.
Algum outro motivo em especial pra não mapear os relacionamentos?
Abraço!
Se a sua tabela associativa tiver apenas as chaves extrangeiras das tabelas que esta associando, vc pode usar @ManyToMany, mas se tiver um campo se quer, vc precisa de um @Entity
O próprio hibernate desaconselha usar ManyToMany
Aqui vc pode ler mais
http://www.hibernate.org/hib_docs/reference/en/html/best-practices.html
Sobre chaves compostas, se vc tiver a chance de criar e definir as tabelas, tenta não usar elas. Eu prefiro usar um identificador que não tem nada a ver com negócio como chave primária (um long da vida auto generated) e os atributos que fariam parte da chave composta, eu criaria uma chave unica.
Sobre JPA e Hibernate, a falta de uma api de Criteria no JPA versão atual, faz com que eu largue mão de usar apenas a especificação e use algo do Hibernate, porém se vc tiver alguma ideia de um dia mudar do Hibernate para o Toplink ou qualquer outro provider, então use apenas a especificação (JPA)
Se a sua tabela associativa tiver apenas as chaves extrangeiras das tabelas que esta associando, vc pode usar @ManyToMany, mas se tiver um campo se quer, vc precisa de um @EntityO próprio hibernate desaconselha usar ManyToMany
Aqui vc pode ler mais
http://www.hibernate.org/hib_docs/reference/en/html/best-practices.html
Sobre chaves compostas, se vc tiver a chance de criar e definir as tabelas, tenta não usar elas. Eu prefiro usar um identificador que não tem nada a ver com negócio como chave primária (um long da vida auto generated) e os atributos que fariam parte da chave composta, eu criaria uma chave unica.
Sobre JPA e Hibernate, a falta de uma api de Criteria no JPA versão atual, faz com que eu largue mão de usar apenas a especificação e use algo do Hibernate, porém se vc tiver alguma ideia de um dia mudar do Hibernate para o Toplink ou qualquer outro provider, então use apenas a especificação (JPA)
Muito bom post…
No meu caso, eu só tenho as chaves da tabela que estou associando… mas ja que esta dando erro, que eu nao sei o que é, vou tentar fazer com “OneToMany”.
Dai como ficara, terei que criar um .class para a tabela associativa?
vc tem algum exemplo?
vlww
Minhas tabelas associativas geralmente tem mais dados, e eu ainda crio uma chave primaria, evito usar chaves compostas.
Mas enfim, essa entidade associativa tera no caso dois @ManyToOne, um para cada tabela que vc quer associar
exemplo:
@Entity
public class A {
...
}
@Entity
public class B {
...
}
@Entity
public class AB {
@ManyToOne
@JoinColumn(nullable = false)
private A a;
@ManyToOne
@JoinColumn(nullable = false)
private B b;
}
No caso do Entity AB vc pode criar uma chave composta do atributo A e B ou então criar id normal long como em outras entidades.
De qualquer forma, qual erro esta dando no seu @ManyToMany?! segue um exemplo:
@Entity
public class A {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@ManyToMany
@JoinTable(name = "tab_ab",
joinColumns = @JoinColumn(name = "id_a", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "id_b", referencedColumnName = "id"))
private Collection<B> bs;
...
}
@Entity
public class B {
@Id
@GeneratedValue
@Column(name = "id")
private Long id;
@ManyToMany
@JoinTable(name = "tab_ab",
joinColumns = @JoinColumn(name = "id_b", referencedColumnName = "id"),
inverseJoinColumns = @JoinColumn(name = "id_a", referencedColumnName = "id"))
private Collection<B> bs;
...
}
Minhas tabelas associativas geralmente tem mais dados, e eu ainda crio uma chave primaria, evito usar chaves compostas.Mas enfim, essa entidade associativa tera no caso dois @ManyToOne, um para cada tabela que vc quer associar
exemplo:
@Entity public class A { ... } @Entity public class B { ... } @Entity public class AB { @ManyToOne @JoinColumn(nullable = false) private A a; @ManyToOne @JoinColumn(nullable = false) private B b; }No caso do Entity AB vc pode criar uma chave composta do atributo A e B ou então criar id normal long como em outras entidades.
De qualquer forma, qual erro esta dando no seu @ManyToMany?! segue um exemplo:
@Entity public class A { @Id @GeneratedValue @Column(name = "id") private Long id; @ManyToMany @JoinTable(name = "tab_ab", joinColumns = @JoinColumn(name = "id_a", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "id_b", referencedColumnName = "id")) private Collection<B> bs; ... } @Entity public class B { @Id @GeneratedValue @Column(name = "id") private Long id; @ManyToMany @JoinTable(name = "tab_ab", joinColumns = @JoinColumn(name = "id_b", referencedColumnName = "id"), inverseJoinColumns = @JoinColumn(name = "id_a", referencedColumnName = "id")) private Collection<B> bs; ... }
Obrigado luBS.
O erro que ocorre tem maiores detalhes em um post que abri. Veja: http://www.guj.com.br/posts/list/119563.java