Sinceramente o q está errado? JPA

2 respostas
V

Estou beirando o desespero… alguém poderia consertar meu código?

@Entity
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Endereco
{
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id_endereco", nullable = false)
	private Integer idEndereco;
	
	@Column(nullable = false)
	private String logradouro;

	@OneToOne
	@JoinColumn(name = "id_pessoa_fisica")
	private PessoaJuridica pessoaJuridica;
	
	@OneToOne
	@JoinColumn(name = "id_pessoa_juridica")
	private PessoaFisica pessoaFisica;
@Entity
@Table(name = "pessoa_juridica")
public class PessoaJuridica extends Endereco
{
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id_pessoa_juridica", nullable = false)
	private Integer idPessoaJuridica;
	
	@Column(nullable = false)
	private String nome;
	
	private String cnpj;
@Entity
@Table(name = "pessoa_fisica")
public class PessoaFisica extends Endereco
{
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "id_pessoa_fisica", nullable = false)
	private Integer idPessoaFisica;
	
	@Column(nullable = false)
	private String nome;

No meu banco está as tabelas
–pessoa_fisica—
id_pessoa_fisica -> chave primária, auto-incremento
nome
id_endereco -> chave estrangeira

–pessoa_juridica–
id_pessoa_juridica -> chave primária, auto-incremento
nome
cnpj
id_endereco -> chave estrangeira

–endereco–
id_endereco -> chave primária, auto-incremento
logradouro

  • dá o erro
    [color=“red”]Unable to define/override @Id(s) on a subclass: modelo.PessoaFisica[/color]

Obs: coloquei só o que interessa nas classes e tabela, claro que tinha um monte de enche lingüiça, exemplo endereco, tem bairro, cidade, cep. por ai vai[/code]

2 Respostas

L

olha só, PF e PJ SÂO UM endereço?! ou eles TÊM um endereço?!
Então ao invés de PJ e PF extends Endereço, vc vai ter um atributo em PF e PJ do tipo Endereco.

Algo assim:

@OneToOne
	@JoinColumn(name = "id_endereco")
	private Endereco endereco;

Ai tira esse abstract e os attr PJ e PF de endereço e tira todos extends, vc não vai ter a principio nenhum extends

ps1: Seu erro não era esse, o erro é que vc tem @Id na classe pai e filha, mas seu modelo tem esta logicamente errado.
ps2: Não da para postar muita coisa que minha empresa limita (um absurdo) o post.

V

PF e PJ cada um tem um endereço;.... são pessoas distintas...

Faço a persistencia assim?

private EntityManagerFactory factory;
	
private EntityManager manager;

                factory = Persistence.createEntityManagerFactory("banco");
		manager = factory.createEntityManager();
		
		EntityTransaction tx = manager.getTransaction();
		tx.begin();
		try 
		{
			manager.persist(endereco);
			manager.persist(pessoaFisica);
			manager.flush();
			manager.clear();
			tx.commit();
		
		}
		catch (RuntimeException e) 
		{ 
			tx.rollback();
			manager.close();
			factory.close();
			
		}
		manager.close();
		factory.close();

obs: endereco e pessoaFisica são objetos de suas respectivas classes

Criado 23 de agosto de 2007
Ultima resposta 23 de ago. de 2007
Respostas 2
Participantes 2