Hibernate Map主键与来自另一个表的外键

时间:2017-03-18 18:49:49

标签: java hibernate jsf java-ee

我有一个以下问题来创建一个表的映射,其主键是另一个表的外键。

表TPESSOA数据库MySql

CREATE TABLE `tpessoa` (
  `codigoPessoa` bigint(20) NOT NULL AUTO_INCREMENT,
  `nome` varchar(200) NOT NULL,
  `cpfcnj` varchar(14) NOT NULL,
  `tipoPessoa` varchar(10) NOT NULL,
  `dataNascimento` date NOT NULL,
  PRIMARY KEY (`codigoPessoa`),
  UNIQUE KEY `codigoPessoa` (`codigoPessoa`)
 ENGINE=InnoDB DEFAULT CHARSET=utf8
)

表TUSUARIO数据库MySql

CREATE TABLE `tusuario` (
  `codigoPessoa` bigint(20) NOT NULL,
  `login` varchar(50) NOT NULL,
  `senha` varchar(90) NOT NULL,
  `dataCadastro` date NOT NULL,
  `ativo` tinyint(1) NOT NULL,
  PRIMARY KEY (`codigoPessoa`),
  UNIQUE KEY `codigoPessoa` (`codigoPessoa`),
  CONSTRAINT `tusuario_ibfk_1` FOREIGN KEY (`codigoPessoa`) REFERENCES `tpessoa` (`codigoPessoa`)
 ENGINE=InnoDB DEFAULT CHARSET=utf8
)

Class Pessoa

@Entity
@Table(name="TPESSOA")
public class Pessoa implements Serializable {

    private static final long serialVersionUID = 9187948214955817194L;

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long codigoPessoa;
    @NotBlank(message="Campo Nome não pode ser vazio!")
    private String nome;
    @NotBlank(message="Campo Cpf/Cnpj não pode ser vazio!")
    private String cpfCnpj;
    @NotBlank(message="Campo Tipo Pessoa não pode ser vazio!")
    private TipoPessoa tipoPessoa;
    @NotBlank(message="Campo Data Nascimento não pode ser vazio!")
    private Date dataNascimento;

Class Usuario

@Entity
@Table(name="TUSUARIO")
public class Usuario {

    @Id
    @OneToOne()
    @JoinColumn(name="codigoPessoa", referencedColumnName="codigoPessoa")
    private Pessoa pessoa;
    @NotBlank(message="Campo Nome não pode ser vazio!")
    private String nome;
    @NotBlank(message="Campo Login não pode ser vazio!")
    private String login;
    private String senha;
    private Date dataCadastro;
    private Boolean ativo;
    @NotNull(message="Campo Grupo não pode ser vaszio!")
    @ManyToMany
    @JoinTable(name = "TUSUARIOGRUPO", joinColumns = @JoinColumn(name = "codusr")
                , inverseJoinColumns = @JoinColumn(name = "codgrp"))    
    private List<Grupo> grupos;

由maven部署时出现异常

15:48:19,448 ERROR [org.jboss.msc.service.fail] (ServerService Thread Pool -- 87) MSC000001: Failed to start service jboss.persistenceunit."sgr-0.0.1-SNAPSHOT.war#sgr-pu": org.jboss.msc.service.StartException in service jboss.persistenceunit."sgr-0.0.1-SNAPSHOT.war#sgr-pu": org.hibernate.cfg.RecoverableException: Unable to find column with logical name: codigoPessoa in org.hibernate.mapping.Table(TUSUARIO) and its related supertables and secondary tables
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:179)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:121)
    at org.wildfly.security.manager.WildFlySecurityManager.doChecked(WildFlySecurityManager.java:667)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1.run(PersistenceUnitServiceImpl.java:193)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at java.lang.Thread.run(Thread.java:745)
    at org.jboss.threads.JBossThread.run(JBossThread.java:320)
Caused by: org.hibernate.cfg.RecoverableException: Unable to find column with logical name: codigoPessoa in org.hibernate.mapping.Table(TUSUARIO) and its related supertables and secondary tables
    at org.hibernate.cfg.Ejb3JoinColumn.checkReferencedColumnsType(Ejb3JoinColumn.java:833)
    at org.hibernate.cfg.BinderHelper.createSyntheticPropertyReference(BinderHelper.java:241)
    at org.hibernate.cfg.ToOneFkSecondPass.doSecondPass(ToOneFkSecondPass.java:100)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processFkSecondPassesInOrder(InFlightMetadataCollectorImpl.java:1727)
    at org.hibernate.boot.internal.InFlightMetadataCollectorImpl.processSecondPasses(InFlightMetadataCollectorImpl.java:1617)
    at org.hibernate.boot.model.process.spi.MetadataBuildingProcess.complete(MetadataBuildingProcess.java:278)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.metadata(EntityManagerFactoryBuilderImpl.java:847)
    at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.build(EntityManagerFactoryBuilderImpl.java:874)
    at org.jboss.as.jpa.hibernate5.TwoPhaseBootstrapImpl.build(TwoPhaseBootstrapImpl.java:44)
    at org.jboss.as.jpa.service.PersistenceUnitServiceImpl$1$1.run(PersistenceUnitServiceImpl.java:161)
    ... 7 more

0 个答案:

没有答案