Olá galera a dúvida é a seguinte: Tenho uma tabela pessoa e uma tabela farmacêutico. Na tabela pessoa o cod_pessoa é auto increment e primary key (PK) e esse mesmo cod_pessoa é Primary foreign key (PFK) em farmacêutico. Quando gero as Entitys pelo netbeans ele não consegue tratar desta forma este relacionamento OneToOne, como tratar essa situação?
Primary foreign key (PFK) em JPA
5 Respostas
C
Posta um trecho do codigo para ver como que esta, ou ve se sua PFK tbm nao esta auto incremeto…
//Entidade Pessoa
package bean;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
*
* @author josimar
*/
@Entity
@Table(name = "pessoa", catalog = "jpapkfk", schema = "public")
@NamedQueries({
@NamedQuery(name = "Pessoa.findAll", query = "SELECT p FROM Pessoa p")})
public class Pessoa implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Basic(optional = false)
@Column(name = "pes_codigo", nullable = false)
private Long pesCodigo;
@Basic(optional = false)
@Column(name = "pes_nome", nullable = false, length = [telefone removido])
private String pesNome;
@OneToOne(cascade = CascadeType.ALL, mappedBy = "pessoa")
private Farmaceutico farmaceutico;
public Pessoa() {
}
public Pessoa(Long pesCodigo) {
this.pesCodigo = pesCodigo;
}
public Pessoa(Long pesCodigo, String pesNome) {
this.pesCodigo = pesCodigo;
this.pesNome = pesNome;
}
public Long getPesCodigo() {
return pesCodigo;
}
public void setPesCodigo(Long pesCodigo) {
this.pesCodigo = pesCodigo;
}
public String getPesNome() {
return pesNome;
}
public void setPesNome(String pesNome) {
this.pesNome = pesNome;
}
public Farmaceutico getFarmaceutico() {
return farmaceutico;
}
public void setFarmaceutico(Farmaceutico farmaceutico) {
this.farmaceutico = farmaceutico;
}
@Override
public int hashCode() {
int hash = 0;
hash += (pesCodigo != null ? pesCodigo.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Pessoa)) {
return false;
}
Pessoa other = (Pessoa) object;
if ((this.pesCodigo == null && other.pesCodigo != null) || (this.pesCodigo != null && !this.pesCodigo.equals(other.pesCodigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return "bean.Pessoa[pesCodigo=" + pesCodigo + "]";
}
}
//Entidade Farmacêutico
package bean;
import java.io.Serializable;
import javax.persistence.Basic;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery;
import javax.persistence.OneToOne;
import javax.persistence.Table;
/**
*
* @author josimar
*/
@Entity
@Table(name = "farmaceutico", catalog = "jpapkfk", schema = "public")
@NamedQueries({
@NamedQuery(name = "Farmaceutico.findAll", query = "SELECT f FROM Farmaceutico f")})
public class Farmaceutico implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@Basic(optional = false)
@Column(name = "pes_codigo", nullable = false)
private Long pesCodigo;
@Basic(optional = false)
@Column(name = "farmo_cro", nullable = false, length = [telefone removido])
private String farmoCro;
@JoinColumn(name = "pes_codigo", referencedColumnName = "pes_codigo", nullable = false, insertable = false, updatable = false)
@OneToOne(optional = false)
private Pessoa pessoa;
public Farmaceutico() {
}
public Farmaceutico(Long pesCodigo) {
this.pesCodigo = pesCodigo;
}
public Farmaceutico(Long pesCodigo, String farmoCro) {
this.pesCodigo = pesCodigo;
this.farmoCro = farmoCro;
}
public Long getPesCodigo() {
return pesCodigo;
}
public void setPesCodigo(Long pesCodigo) {
this.pesCodigo = pesCodigo;
}
public String getFarmoCro() {
return farmoCro;
}
public void setFarmoCro(String farmoCro) {
this.farmoCro = farmoCro;
}
public Pessoa getPessoa() {
return pessoa;
}
public void setPessoa(Pessoa pessoa) {
this.pessoa = pessoa;
}
@Override
public int hashCode() {
int hash = 0;
hash += (pesCodigo != null ? pesCodigo.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof Farmaceutico)) {
return false;
}
Farmaceutico other = (Farmaceutico) object;
if ((this.pesCodigo == null && other.pesCodigo != null) || (this.pesCodigo != null && !this.pesCodigo.equals(other.pesCodigo))) {
return false;
}
return true;
}
@Override
public String toString() {
return "bean.Farmaceutico[pesCodigo=" + pesCodigo + "]";
}
}
//Método teste
public void salvar() {
em = null;
try {
em = Conexao.getConexao();
pessoa = new Pessoa();
pessoa.setPesNome("Domeneck");
farmaceutico.setFarmoCro("000002");
//Inicia trasação
em.getTransaction().begin();
pessoa = em.merge(pessoa);
farmaceutico.setPessoa(pessoa);
em.merge(farmaceutico);
//Finaliza transação
em.getTransaction().commit();
JOptionPane.showMessageDialog(null, "Salvo!", "mensagem", JOptionPane.INFORMATION_MESSAGE);
} catch (Exception ex) {
//Rollback transação
em.getTransaction().rollback();
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
C
tenta remover a notação…
insertable = false, updatable = false
…do seu classe de entidade de farmaceutico, que ele impede que você possa fazer algo sem modificar na outra table.
certo, eu retirei mais eu necessito colocar alguma anotação especifica que identifique este tipo de relacionamento em farmacêutico ou em pessoa? Pois eu tirei a anotação
como você me disse e deu o seguinte erro:
insertable = false, updatable = false
java.lang.IllegalStateException: Transaction not active
Criado 24 de junho de 2010
Ultima resposta 24 de jun. de 2010
Respostas 5
Participantes 3
Alura POO: o que é programação orientada a objetos? Aprenda os conceitos básicos da programação orientada a objetos, como classes, objetos, herança, encapsulamento e polimorfismo, com exemplos.
Casa do Codigo Inteligencia Artificial e ChatGPT: Da revolucao dos... Por Fabricio Carraro — Casa do Codigo