Mapeamento Hibernate com JPA

Boa dia galera,

Estou com me batendo com um probelma de mapeamento faz algus dias e não achei solução.

estou tentando mapear estas duas classes.

import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.Version;

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

    private static final long serialVersionUID = 23L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long idNCM;
    private String codigoNCM;
    private String descricaoNCM;
    @ManyToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "idGrupo")
    private GrupoNCM grupoNCM = new GrupoNCM();
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "idIcms")
    private Icms ICMS = new Icms();
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "idIpi")
    private Ipi IPI = new Ipi();
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "idPis")
    private Pis PIS = new Pis();
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "idPisST")
    private PisST PISST = new PisST();
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "idCofins")
    private Cofins COFINS = new Cofins();
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "idCofinsST")
    private CofinsST COFINSST = new CofinsST();
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "idII")
    private II II = new II();
    @OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
    @JoinColumn(name = "idIssqn")
    private Issqn ISSQN = new Issqn();

// getters e setter omitidos;
}

e mais esta otra

import java.io.Serializable;
import java.math.BigDecimal;
import java.sql.Timestamp;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.Version;

@Entity
@Table(name = "PRODUTOESERVICOS")
public class Produto implements Serializable {

    private static final long serialVersionUID = 23L;
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "IDPRODUTO")
    private Long idProduto;
    @Column(name = "XPROD", length = 120)
    private String xProd;
    @Column(name = "CPROD", length = 60)
    private String cProd;
    @Column(name = "CEAN", length = 14)
    private String cEAN;
    @Column(name = "CEANTRIB", length = 14)
    private String cEANTrib;
    @Column(name = "EXTIPI", length = 3)
    private String EXTIPI;
    @Column(name = "NCM", length = 8)
    private String NCM;
    @Column(name = "UCOM", length = 6)
    private String uCom;
    @Column(name = "VUNCOM", length = 21)
    private BigDecimal vUnCom = BigDecimal.ZERO;
    @Column(name = "UTRIB", length = 6)
    private String uTrib;
    @Column(name = "QTRIB", length = 15)
    private BigDecimal qTrib = BigDecimal.ZERO;
    @Column(name = "VUNTRIB", length = 21)
    private BigDecimal vUnTrib = BigDecimal.ZERO;
    @Column(name = "DTCADASTRO")
    @Temporal(javax.persistence.TemporalType.DATE)
    private Date dtCadastro;
    @Column(name = "ATIVO")
    private Boolean ativo;
    @Version
    @Column(name = "VERSAO")
    private Timestamp versao;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "IDNCM")
    private NCM nomeComMerc;
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "IDEMITENTE")
    private Emitente emitente;

// getter e setter omitidos;

}

Quando gero o mapeamento ele não cria o relacionamento entre a as duas tabelas que no caso seria 1xN com a FK de NCM na tabela produto.

Fiz diversos testes e percebi uma coisa;
Quando troco o nome da classe produto ele gera, mais se deixar com o nome de produto não gera.
Outra ponto interessante.

Se criar outra classe e copiar o codigo da produto e colar dentro da nova classe. esta nova classe gera o mapeamento corretamente.

Alguém ja passou por este problema.

Estou usando o banco postgresql.

agradeço desde já.