GARANTIR DESCONTO

Fórum mapeamento em jpa + hibernate quatro tabelas #524960

06/07/2015

0

Bom dia! Estou com uma dúvida, tenho as tabelas: Pessoa, Lançamento, Cidade e Estado. Fiz o mapeamento porém está dando mensagem de erro:

10:13:40,092 INFO [org.hibernate.ejb.Ejb3Configuration] (MSC service thread 1-6) HHH000204: Processing PersistenceUnitInfo [
name: primary
...]
10:13:40,280 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC00001: Failed to start service jboss.persistenceunit."ProjetoPiloto.war#primary": org.jboss.msc.service.StartException in service jboss.persistenceunit."ProjetoPiloto.war#primary": Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_79]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: primary] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
... 3 more
Caused by: org.hibernate.AnnotationException: Unknown mappedBy in: com.projetopiloto.modelo.Cidade.estado, referenced property unknown: com.projetopiloto.modelo.Estado.estado
at org.hibernate.cfg.OneToOneSecondPass.doSecondPass(OneToOneSecondPass.java:158)
at org.hibernate.cfg.Configuration.originalSecondPassCompile(Configuration.java:1586)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1359)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
... 9 more


segue minhas classes, se alguém puder me auxiliar desde já agradeço

1 - classe Pessoa
@Entity
@Table(name = "tb_pessoa")
@SequenceGenerator(name = "pessoa_sequence", sequenceName = "seq_tb_pessoa", allocationSize = 1)
public class Pessoa {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pessoa_sequence")
@Column(name = "cod_pessoa")
private Long id;

@Column(name = "pessoa", nullable = false)
private String nome;

@Column(name="endereco", nullable=false)
private String endereco;


@Column(name="cidade", nullable=true)
private Cidade cidade;

@Column(name="estado", nullable=true)
private Estado uf;

@Column(name="cep", nullable=false)
private String cep;

@Column(name="n_rg", nullable=false)
private String rg;

@Column(name="orgExpedidor", nullable=false)
private String orgExpedidor;

@Column(name="cpf", nullable=false)
private String cpf;

@Column(name="estCivil", nullable=false)
private String estadoCivil;

@Column(name="dt_nasc", nullable=false)
@Temporal(TemporalType.DATE)
private Date dataNascimento;

@Column(name="email", nullable=false)
private String email;

get e set...

2- classe Lancamento

@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="tb_lancamento")
@SequenceGenerator(name="lancamento_sequence", sequenceName="seq_tb_lancamento",allocationSize=1)
public class Lancamento {

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="lancamento_sequence")
@Column(name="cod_lancamento")
private Long id;

@NotNull
@ManyToOne(optional=false)
@JoinColumn(name="pessoa_id")
private Pessoa pessoa;

@NotEmpty
@Size(max=80)
@Column(name="descricao",length=80, nullable=false)
private String descricao;

@NotNull
@DecimalMin("0")
@Column(name="valor",precision=10, scale=2, nullable=false)
private BigDecimal valor;

@NotNull
@Enumerated(javax.persistence.EnumType.STRING)
@Column(name="tipo",nullable=false)
private TipoLancamento tipo;

@NotNull
@Temporal(TemporalType.DATE)
@Column(name="dt_vencimento", nullable=false)
private Date dataVencimento;

@Temporal(TemporalType.DATE)
@Column(name="dt_pagamento", nullable=false)
private Date dataPagamento;

get e setter...

3 - classe cidade
@Entity
@Table(name = "tb_cidade")
@SequenceGenerator(name = "cidade_sequence", sequenceName = "seq_tb_cidade", allocationSize = 1)
public class Cidade {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cidade_sequence")
@Column(name = "cod_cidade")
private Long id_cidade;

@Column(name = "nome", nullable = false)
private String nome;


@NotNull
private Estado estado;
get e setter...

4- classe estado
@Entity
@Table(name = "tb_estado")
@SequenceGenerator(name = "estado_sequence", sequenceName = "seq_tb_estado", allocationSize = 1)
public class Estado {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "estado_sequence")
@Column(name = "cod_estado")
private Long id;

@Column(name = "nome", nullable = false)
private String nome;

@Column(name = "uf", nullable = false)
private String uf;

get e setter...

só tenho que mapear a cidade e o estado na classe pessoa e o campo estado na classe cidade. Alguém pode me ajudar?
Adriana

Adriana

Responder

Posts

06/07/2015

Ronaldo Lanhellas

Em nenhum momento vi você usando o @ManyToOne, ex:

Na classe cidade:

@ManyToOne
@JoinColumn(name = "id_estado")
private Estado estado;



Faça isso para os outros atributos que possuem relacionamentos
Responder

Gostei + 0

06/07/2015

Ronaldo Lanhellas

Em nenhum momento vi você usando o @ManyToOne, ex:

Na classe cidade:

@ManyToOne
@JoinColumn(name = "id_estado")
private Estado estado;



Faça isso para os outros atributos que possuem relacionamentos
Responder

Gostei + 0

07/07/2015

Carlos Proença

Adriana,

é bem por ai onde o nosso amigo Ronaldo esta falando, voce precisa mapear os relacionamentos entre as entidades.
da uma olhada no link devmedia hibernate relacionamentos

att.
Responder

Gostei + 0

07/07/2015

Adriana

@Entity
@Table(name = "tb_pessoa")
@SequenceGenerator(name = "pessoa_sequence", sequenceName = "seq_tb_pessoa", allocationSize = 1)
public class Pessoa {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pessoa_sequence")
@Column(name = "cod_pessoa")
private Long id;

@Column(name = "pessoa", nullable = false)
private String nome;

@Column(name="endereco", nullable=false)
private String endereco;

@ManyToOne
@JoinColumn(name = "id_cidade")
@Column(name="cidade", nullable=true)
private Cidade cidade;

@ManyToOne
@JoinColumn(name = "id_estado")
@Column(name="estado", nullable=true)
private Estado uf;

@Column(name="cep", nullable=false)
private String cep;

@Column(name="n_rg", nullable=false)
private String rg;

@Column(name="orgExpedidor", nullable=false)
private String orgExpedidor;

@Column(name="cpf", nullable=false)
private String cpf;

@Column(name="estCivil", nullable=false)
private String estadoCivil;

@Column(name="dt_nasc", nullable=false)
@Temporal(TemporalType.DATE)
private Date dataNascimento;

@Column(name="email", nullable=false)
private String email;

---------------------------------------------------------------------------
@Embeddable
@Entity
@Table(name = "tb_cidade")
@SequenceGenerator(name = "cidade_sequence", sequenceName = "seq_tb_cidade", allocationSize = 1)
public class Cidade {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cidade_sequence")
@Column(name = "cod_cidade")
private Long id_cidade;

@Column(name = "nome", nullable = false)
private String nome;


@ManyToOne
@JoinColumn(name = "id_estado")
private Estado estado;
--------------------------------------------------------------------
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="tb_lancamento")
@SequenceGenerator(name="lancamento_sequence", sequenceName="seq_tb_lancamento",allocationSize=1)
public class Lancamento {

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="lancamento_sequence")
@Column(name="cod_lancamento")
private Long id;

@NotNull
@ManyToOne(optional=false)
@JoinColumn(name="pessoa_id")
private Pessoa pessoa;

@NotEmpty
@Size(max=80)
@Column(name="descricao",length=80, nullable=false)
private String descricao;

@NotNull
@DecimalMin("0")
@Column(name="valor",precision=10, scale=2, nullable=false)
private BigDecimal valor;

@NotNull
@Enumerated(javax.persistence.EnumType.STRING)
@Column(name="tipo",nullable=false)
private TipoLancamento tipo;

@NotNull
@Temporal(TemporalType.DATE)
@Column(name="dt_vencimento", nullable=false)
private Date dataVencimento;

@Temporal(TemporalType.DATE)
@Column(name="dt_pagamento", nullable=false)
private Date dataPagamento;
-------------------------------------------------------------------------------------------

continua dando o mesmo erro abaixo:

08:53:33,658 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC00001: Failed to start service jboss.persistenceunit."ProjetoPiloto.war#primary": org.jboss.msc.service.StartException in service jboss.persistenceunit."ProjetoPiloto.war#primary": Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_79]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: primary] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
... 3 more
Caused by: org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property: com.projetopiloto.modelo.Pessoa.cidade
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1553)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:765)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:684)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3406)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3360)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1334)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
... 9 more
Responder

Gostei + 0

07/07/2015

Adriana

@Entity
@Table(name = "tb_pessoa")
@SequenceGenerator(name = "pessoa_sequence", sequenceName = "seq_tb_pessoa", allocationSize = 1)
public class Pessoa {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "pessoa_sequence")
@Column(name = "cod_pessoa")
private Long id;

@Column(name = "pessoa", nullable = false)
private String nome;

@Column(name="endereco", nullable=false)
private String endereco;

@ManyToOne
@JoinColumn(name = "id_cidade")
@Column(name="cidade", nullable=true)
private Cidade cidade;

@ManyToOne
@JoinColumn(name = "id_estado")
@Column(name="estado", nullable=true)
private Estado uf;

@Column(name="cep", nullable=false)
private String cep;

@Column(name="n_rg", nullable=false)
private String rg;

@Column(name="orgExpedidor", nullable=false)
private String orgExpedidor;

@Column(name="cpf", nullable=false)
private String cpf;

@Column(name="estCivil", nullable=false)
private String estadoCivil;

@Column(name="dt_nasc", nullable=false)
@Temporal(TemporalType.DATE)
private Date dataNascimento;

@Column(name="email", nullable=false)
private String email;

---------------------------------------------------------------------------
@Embeddable
@Entity
@Table(name = "tb_cidade")
@SequenceGenerator(name = "cidade_sequence", sequenceName = "seq_tb_cidade", allocationSize = 1)
public class Cidade {

@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "cidade_sequence")
@Column(name = "cod_cidade")
private Long id_cidade;

@Column(name = "nome", nullable = false)
private String nome;


@ManyToOne
@JoinColumn(name = "id_estado")
private Estado estado;
--------------------------------------------------------------------
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@Table(name="tb_lancamento")
@SequenceGenerator(name="lancamento_sequence", sequenceName="seq_tb_lancamento",allocationSize=1)
public class Lancamento {

@Id
@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="lancamento_sequence")
@Column(name="cod_lancamento")
private Long id;

@NotNull
@ManyToOne(optional=false)
@JoinColumn(name="pessoa_id")
private Pessoa pessoa;

@NotEmpty
@Size(max=80)
@Column(name="descricao",length=80, nullable=false)
private String descricao;

@NotNull
@DecimalMin("0")
@Column(name="valor",precision=10, scale=2, nullable=false)
private BigDecimal valor;

@NotNull
@Enumerated(javax.persistence.EnumType.STRING)
@Column(name="tipo",nullable=false)
private TipoLancamento tipo;

@NotNull
@Temporal(TemporalType.DATE)
@Column(name="dt_vencimento", nullable=false)
private Date dataVencimento;

@Temporal(TemporalType.DATE)
@Column(name="dt_pagamento", nullable=false)
private Date dataPagamento;
-------------------------------------------------------------------------------------------

continua dando o mesmo erro abaixo:

08:53:33,658 ERROR [org.jboss.msc.service.fail] (MSC service thread 1-6) MSC00001: Failed to start service jboss.persistenceunit."ProjetoPiloto.war#primary": org.jboss.msc.service.StartException in service jboss.persistenceunit."ProjetoPiloto.war#primary": Failed to start service
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1767) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) [rt.jar:1.7.0_79]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) [rt.jar:1.7.0_79]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0_79]
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: primary] Unable to build EntityManagerFactory
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:914)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:889)
at org.hibernate.ejb.HibernatePersistence.createContainerEntityManagerFactory(HibernatePersistence.java:73)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.createContainerEntityManagerFactory(PersistenceUnitServiceImpl.java:162)
at org.jboss.as.jpa.service.PersistenceUnitServiceImpl.start(PersistenceUnitServiceImpl.java:85)
at org.jboss.msc.service.ServiceControllerImpl$StartTask.startService(ServiceControllerImpl.java:1811) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1746) [jboss-msc-1.0.2.GA.jar:1.0.2.GA]
... 3 more
Caused by: org.hibernate.AnnotationException: @Column(s) not allowed on a @ManyToOne property: com.projetopiloto.modelo.Pessoa.cidade
at org.hibernate.cfg.AnnotationBinder.processElementAnnotations(AnnotationBinder.java:1553)
at org.hibernate.cfg.AnnotationBinder.processIdPropertiesIfNotAlready(AnnotationBinder.java:765)
at org.hibernate.cfg.AnnotationBinder.bindClass(AnnotationBinder.java:684)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processAnnotatedClassesQueue(Configuration.java:3406)
at org.hibernate.cfg.Configuration$MetadataSourceQueue.processMetadata(Configuration.java:3360)
at org.hibernate.cfg.Configuration.secondPassCompile(Configuration.java:1334)
at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1724)
at org.hibernate.ejb.EntityManagerFactoryImpl.<init>(EntityManagerFactoryImpl.java:84)
at org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Configuration.java:904)
... 9 more
Responder

Gostei + 0

07/07/2015

Ronaldo Lanhellas

Aqui esta errado:

@ManyToOne
@JoinColumn(name = "id_cidade")
@Column(name="cidade", nullable=true)
private Cidade cidade;


Mude para:

@ManyToOne
@JoinColumn(name = "id_cidade")
private Cidade cidade;
Responder

Gostei + 0

07/07/2015

Ronaldo Lanhellas

Aqui esta errado:

@ManyToOne
@JoinColumn(name = "id_cidade")
@Column(name="cidade", nullable=true)
private Cidade cidade;


Mude para:

@ManyToOne
@JoinColumn(name = "id_cidade")
private Cidade cidade;
Responder

Gostei + 0

07/07/2015

Adriana

Muito obrigada! Deu certo, corrigi o erro que me falou e consegui compilar e gerar as tabelas normalmente.
Responder

Gostei + 0

07/07/2015

Ronaldo Lanhellas

Muito obrigada! Deu certo, corrigi o erro que me falou e consegui compilar e gerar as tabelas normalmente.


Perfeito. Disponha
Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar