JPA + Inner Join

Boa tarde Pessoal,

estou tentando fazer uma consulta utilizando jpa, com duas tabelas.

Hist_Consolidado_2014
tmp

onde
tenho em ambas o campo id, porem não são chaves em nenhuma das duas tabelas.

Estou tentando fazer da seguinte maneira

	private List<Hist_Consolidado_2014> consultar(String pLogin,String pCondicao){
		
		String vLogin = null;
		
		EntityManager entityManager = getEntityManager();
		String vSQL  = " a from Hist_Consolidado_2014 a";
			   vSQL += " join Tmp_Ntc b  ";
			   //vSQL += " a.num_ntc = b.num_ntc";
			   
		int vPos = pLogin.indexOf("-");
		
		if (vPos != -1){
			vLogin = pLogin.substring(0, vPos-2);
			
			vSQL += " WHERE b.NUM_LOGIN = '"+vLogin+"'";
		}
		
		if (pCondicao != null){
			vSQL += " AND " + pCondicao;
		}
		
		vSQL += " ORDER BY a.NUM_ID";
		System.out.println("Consulta executada : " + vSQL);
		
		Query vQuery = entityManager.createQuery(vSQL);		
		@SuppressWarnings("unchecked")
		List<Hist_Consolidado_2014> listaHist = vQuery.getResultList();
		return listaHist;		
	}

Alguem poderia me ajudar, pois não conheço como jazer join’s em jpa.

grato galera.

Aqui mostra como fazer join: http://uaihebert.com/?p=1137

Desculpe incomodar,

Mais estava lendo mais não consegui entender como funciona.

Alterei a minha classe de Model das duas tabela para relacionar as tabelas que fazem join.

package com.br.model;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Table;

@Entity
@Table(name="Tmp_Ntc")
public class Tmp_Ntc {

		@Id
		@GeneratedValue(strategy = GenerationType.AUTO)
		int    COD_NTC;
		@Column	
		String NUM_LOGIN;
		@Column	
		String NUM_NTC;
		
		@JoinColumn(name="NUM_NTC")
		
		public int getCOD_NTC() {
			return COD_NTC;
		}

		public void setCOD_NTC(int cOD_NTC) {
			COD_NTC = cOD_NTC;
		}
		
		public String getNUM_NTC() {
			return NUM_NTC;
		}
		
		public void setNUM_NTC(String nUM_NTC) {
			NUM_NTC = nUM_NTC;
		}

		public String getLOGIN() {
			return NUM_LOGIN;
		}

		public void setLOGIN(String lOGIN) {
			NUM_LOGIN = lOGIN;
		}
}
package com.br.model;

import java.util.Date;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.Table;

@Entity @Table(name="Hist_Consolidado_2014")
public class Hist_Consolidado_2014 {
	
	@Id
	@GeneratedValue(strategy = GenerationType.AUTO)
	int NUM_ID;
	@Column
	Date DAT_CARGA;
	@Column
	Date DAT_ATIV;
	@Column
	String NUM_NTC;
	@Column
	String DSC_TIPO_OPER;
	@Column
	String DSC_PLANO;
	@Column
	String COD_MOBILE;
	@Column
	String DSC_MES_REF;
	@Column
	String SIT_PGTO;
	@Column
	float VLR_PGTO;
	@Column
	String COD_IRREG;
	@Column
	String DSC_EXTRATOR;
	@Column
	String DSC_CANAL;
	@Column
	String dSC_STATUS;
	@Column
	float VLR_AJUSTE;
	@Column
	String NUM_SIMCARD;
	@Column
	String SIT_DEB_CRE;
	@Column
	String DSC_PENDENCIA;
	@Column
	String DSC_REGIONAL;
	@Column
	String DSC_QUINZENA;
	@Column
	String DSC_STATUS_DOC;
	@Column
	String DSC_PRODUTO;
	@Column
	Date DAT_ESTORNO;
	@Column
	float VLR_FRANQUIA;
	@Column
	String COD_REGIONAL;
	@Column
	String SIT_EXCECAO;
	@Column
	String DSC_EXCECAO;
	@Column
	String COD_MOBILE_EXTRATO;
	@Column
	String DSC_REGIONAL_FI;
	@Column
	float VLR_COMISSAO_VPC;
	@Column
	String DSC_EVENTO_ATV;
	@Column
	String COD_VENDEDOR;
	@Column
	float VLR_RECARGA;
	@Column
	String DSC_MOTIVO;
	@Column
	String DSC_REDE;
	@Column
	Date DAT_VENC_FATURA;
	@Column
	String DSC_TP_APURACAO;
	@Column
	String COD_SAP_APAR;
	@Column
	float VLR_COMPRA;
	@Column
	String DSC_DADOS;
	@Column
	float VLR_ICMS_COMPRA;
	@Column
	float VLR_ICMS_VENDA;
	@Column
	String NUM_IMEI;
	@Column
	float VLR_MARGEM;
	@Column
	String DSC_MODELO;
	@Column
	String DSC_OFERTA;
	@Column
	float VLR_VENDA;
	@Column
	float VLR_JUROS;
	@Column
	String NUM_LOTE_PGTO;
	@Column
	float VLR_CLARO_CLUBE;
	@Column
	String DSC_TRUECOMP;
	@Column
	String DSC_EXCECAO_TC;
	@Column
	String ORDER_ID;
	@Column
	String ACCOUNT_ID;
	@Column
	String DSC_REGULARIZACAO;
	
	@JoinColumn(name="NUM_NTC")
	
	public int getNUM_ID() {
		return NUM_ID;
	}
	public void setNUM_ID(int nUM_ID) {
		NUM_ID = nUM_ID;
	}
	public Date getDAT_CARGA() {
		return DAT_CARGA;
	}
	public void setDAT_CARGA(Date dAT_CARGA) {
		DAT_CARGA = dAT_CARGA;
	}
	public Date getDAT_ATIV() {
		return DAT_ATIV;
	}
	public void setDAT_ATIV(Date dAT_ATIV) {
		DAT_ATIV = dAT_ATIV;
	}
	public String getNUM_NTC() {
		if (NUM_NTC == null){
			return "";
		}else{
			return NUM_NTC;
		}
	}
	public void setNUM_NTC(String nUM_NTC) {
		NUM_NTC = nUM_NTC;
	}
	public String getDSC_TIPO_OPER() {
		if (DSC_TIPO_OPER == null){
			return "";
		}else{
			return DSC_TIPO_OPER;
		}
	}
	public void setDSC_TIPO_OPER(String dSC_TIPO_OPER) {
		DSC_TIPO_OPER = dSC_TIPO_OPER;
	}
	public String getDSC_PLANO() {
		if (DSC_PLANO == null){
			return "";
		}else{
			return DSC_PLANO;
		}
	}
	public void setDSC_PLANO(String dSC_PLANO) {
		DSC_PLANO = dSC_PLANO;
	}
	public String getCOD_MOBILE() {
		if (COD_MOBILE == null){
			return "";
		}else{
			return COD_MOBILE;
		}
	}
	public void setCOD_MOBILE(String cOD_MOBILE) {
		COD_MOBILE = cOD_MOBILE;
	}
	public String getDSC_MES_REF() {
		if (DSC_MES_REF == null){
			return "";
		}else{
			return DSC_MES_REF;
		}
	}
	public void setDSC_MES_REF(String dSC_MES_REF) {
		DSC_MES_REF = dSC_MES_REF;
	}
	public String getSIT_PGTO() {
		if (SIT_PGTO == null){
			return "";
		}else{
			return SIT_PGTO;
		}
	}
	public void setSIT_PGTO(String sIT_PGTO) {
		SIT_PGTO = sIT_PGTO;
	}
	public float getVLR_PGTO() {
		return VLR_PGTO;
	}
	public void setVLR_PGTO(float vLR_PGTO) {
		VLR_PGTO = vLR_PGTO;
	}
	public String getCOD_IRREG() {
		if (COD_IRREG == null){
			return "";
		}else{
			return COD_IRREG;
		}
	}
	public void setCOD_IRREG(String cOD_IRREG) {
		COD_IRREG = cOD_IRREG;
	}
	public String getDSC_EXTRATOR() {
		if (DSC_EXTRATOR == null){
			return "";
		}else{
			return DSC_EXTRATOR;
		}
	}
	public void setDSC_EXTRATOR(String dSC_EXTRATOR) {
		DSC_EXTRATOR = dSC_EXTRATOR;
	}
	public String getDSC_CANAL() {
		if (DSC_CANAL == null){
			return "";
		}else{
			return DSC_CANAL;
		}
	}
	public void setDSC_CANAL(String dSC_CANAL) {
		DSC_CANAL = dSC_CANAL;
	}
	public String getdSC_STATUS() {
		if (dSC_STATUS == null){
			return "";
		}else{
			return dSC_STATUS;
		}
	}
	public void setdSC_STATUS(String dSC_STATUS) {
		this.dSC_STATUS = dSC_STATUS;
	}
	public float getVLR_AJUSTE() {
		return VLR_AJUSTE;
	}
	public void setVLR_AJUSTE(float vLR_AJUSTE) {
		VLR_AJUSTE = vLR_AJUSTE;
	}
	public String getNUM_SIMCARD() {
		if (NUM_SIMCARD == null){
			return "";
		}else{
			return NUM_SIMCARD;
		}
	}
	public void setNUM_SIMCARD(String nUM_SIMCARD) {
		NUM_SIMCARD = nUM_SIMCARD;
	}
	public String getSIT_DEB_CRE() {
		if (SIT_DEB_CRE == null){
			return "";
		}else{
			return SIT_DEB_CRE;
		}
	}
	public void setSIT_DEB_CRE(String sIT_DEB_CRE) {
		SIT_DEB_CRE = sIT_DEB_CRE;
	}
	public String getDSC_PENDENCIA() {
		if (DSC_PENDENCIA == null){
			return "";
		}else{
			return DSC_PENDENCIA;
		}
	}
	public void setDSC_PENDENCIA(String dSC_PENDENCIA) {
		DSC_PENDENCIA = dSC_PENDENCIA;
	}
	public String getDSC_REGIONAL() {
		if (DSC_REGIONAL == null){
			return "";
		}else{
			return DSC_REGIONAL;
		}
	}
	public void setDSC_REGIONAL(String dSC_REGIONAL) {
		DSC_REGIONAL = dSC_REGIONAL;
	}
	public String getDSC_QUINZENA() {
		if (DSC_QUINZENA == null){
			return "";
		}else{
			return DSC_QUINZENA;
		}
	}
	public void setDSC_QUINZENA(String dSC_QUINZENA) {
		DSC_QUINZENA = dSC_QUINZENA;
	}
	public String getDSC_STATUS_DOC() {
		if (DSC_STATUS_DOC == null){
			return "";
		}else{
			return DSC_STATUS_DOC;
		}
	}
	public void setDSC_STATUS_DOC(String dSC_STATUS_DOC) {
		DSC_STATUS_DOC = dSC_STATUS_DOC;
	}
	public String getDSC_PRODUTO() {
		if (DSC_PRODUTO == null){
			return "";
		}else{
			return DSC_PRODUTO;
		}
	}
	public void setDSC_PRODUTO(String dSC_PRODUTO) {
		DSC_PRODUTO = dSC_PRODUTO;
	}
	public Date getDAT_ESTORNO() {
		return DAT_ESTORNO;
	}
	public void setDAT_ESTORNO(Date dAT_ESTORNO) {
		DAT_ESTORNO = dAT_ESTORNO;
	}
	public float getVLR_FRANQUIA() {
		return VLR_FRANQUIA;
	}
	public void setVLR_FRANQUIA(float vLR_FRANQUIA) {
		VLR_FRANQUIA = vLR_FRANQUIA;
	}
	public String getCOD_REGIONAL() {
		if (COD_REGIONAL == null){
			return "";
		}else{
			return COD_REGIONAL;
		}
	}
	public void setCOD_REGIONAL(String cOD_REGIONAL) {
		COD_REGIONAL = cOD_REGIONAL;
	}
	public String getSIT_EXCECAO() {
		if (SIT_EXCECAO == null){
			return "";
		}else{
			return SIT_EXCECAO;
		}
	}
	public void setSIT_EXCECAO(String sIT_EXCECAO) {
		SIT_EXCECAO = sIT_EXCECAO;
	}
	public String getDSC_EXCECAO() {
		if (DSC_EXCECAO == null){
			return "";
		}else{
			return DSC_EXCECAO;
		}
	}
	public void setDSC_EXCECAO(String dSC_EXCECAO) {
		DSC_EXCECAO = dSC_EXCECAO;
	}
	public String getCOD_MOBILE_EXTRATO() {
		if (COD_MOBILE_EXTRATO == null){
			return "";
		}else{
			return COD_MOBILE_EXTRATO;
		}
	}
	public void setCOD_MOBILE_EXTRATO(String cOD_MOBILE_EXTRATO) {
		COD_MOBILE_EXTRATO = cOD_MOBILE_EXTRATO;
	}
	public String getDSC_REGIONAL_FI() {
		if (DSC_REGIONAL_FI == null){
			return "";
		}else{
			return DSC_REGIONAL_FI;
		}
	}
	public void setDSC_REGIONAL_FI(String dSC_REGIONAL_FI) {
		DSC_REGIONAL_FI = dSC_REGIONAL_FI;
	}
	public float getVLR_COMISSAO_VPC() {
		return VLR_COMISSAO_VPC;
	}
	public void setVLR_COMISSAO_VPC(float vLR_COMISSAO_VPC) {
		VLR_COMISSAO_VPC = vLR_COMISSAO_VPC;
	}
	public String getDSC_EVENTO_ATV() {
		if (DSC_EVENTO_ATV == null){
			return "";
		}else{
			return DSC_EVENTO_ATV;
		}
	}
	public void setDSC_EVENTO_ATV(String dSC_EVENTO_ATV) {
		DSC_EVENTO_ATV = dSC_EVENTO_ATV;
	}
	public String getCOD_VENDEDOR() {
		if (COD_VENDEDOR == null){
			return "";
		}else{
			return COD_VENDEDOR;
		}
	}
	public void setCOD_VENDEDOR(String cOD_VENDEDOR) {
		COD_VENDEDOR = cOD_VENDEDOR;
	}
	public float getVLR_RECARGA() {
		return VLR_RECARGA;
	}
	public void setVLR_RECARGA(float vLR_RECARGA) {
		VLR_RECARGA = vLR_RECARGA;
	}
	public String getDSC_MOTIVO() {
		if (DSC_MOTIVO == null){
			return "";
		}else{
			return DSC_MOTIVO;
		}
	}
	
	public void setDSC_MOTIVO(String dSC_MOTIVO) {
		DSC_MOTIVO = dSC_MOTIVO;
	}
	public String getDSC_REDE() {
		if (DSC_REDE == null){
			return "";
		}else{
			return DSC_REDE;
		}
	}
	public void setDSC_REDE(String dSC_REDE) {
		DSC_REDE = dSC_REDE;
	}
	public Date getDAT_VENC_FATURA() {
		return DAT_VENC_FATURA;
	}
	public void setDAT_VENC_FATURA(Date dAT_VENC_FATURA) {
		DAT_VENC_FATURA = dAT_VENC_FATURA;
	}
	public String getDSC_TP_APURACAO() {
		if (DSC_TP_APURACAO == null){
			return "";
		}else{
			return DSC_TP_APURACAO;
		}
	}
	public void setDSC_TP_APURACAO(String dSC_TP_APURACAO) {
		DSC_TP_APURACAO = dSC_TP_APURACAO;
	}
	public String getCOD_SAP_APAR() {
		if (COD_SAP_APAR == null){
			return "";
		}else{
			return COD_SAP_APAR;
		}
	}
	public void setCOD_SAP_APAR(String cOD_SAP_APAR) {
		COD_SAP_APAR = cOD_SAP_APAR;
	}
	public float getVLR_COMPRA() {
		return VLR_COMPRA;
	}
	public void setVLR_COMPRA(float vLR_COMPRA) {
		VLR_COMPRA = vLR_COMPRA;
	}
	public String getDSC_DADOS() {
		if (DSC_DADOS == null){
			return "";
		}else{
			return DSC_DADOS;
		}
	}
	public void setDSC_DADOS(String dSC_DADOS) {
		DSC_DADOS = dSC_DADOS;
	}
	public float getVLR_ICMS_COMPRA() {
		return VLR_ICMS_COMPRA;
	}
	public void setVLR_ICMS_COMPRA(float vLR_ICMS_COMPRA) {
		VLR_ICMS_COMPRA = vLR_ICMS_COMPRA;
	}
	public float getVLR_ICMS_VENDA() {
		return VLR_ICMS_VENDA;
	}
	public void setVLR_ICMS_VENDA(float vLR_ICMS_VENDA) {
		VLR_ICMS_VENDA = vLR_ICMS_VENDA;
	}
	public String getNUM_IMEI() {
		if (NUM_IMEI == null){
			return "";
		}else{
			return NUM_IMEI;
		}
	}
	public void setNUM_IMEI(String nUM_IMEI) {
		NUM_IMEI = nUM_IMEI;
	}
	public float getVLR_MARGEM() {
		return VLR_MARGEM;
	}
	public void setVLR_MARGEM(float vLR_MARGEM) {
		VLR_MARGEM = vLR_MARGEM;
	}
	public String getDSC_MODELO() {
		if (DSC_MODELO == null){
			return "";
		}else{
			return DSC_MODELO;
		}
	}
	public void setDSC_MODELO(String dSC_MODELO) {
		DSC_MODELO = dSC_MODELO;
	}
	public String getDSC_OFERTA() {
		if (DSC_OFERTA == null){
			return "";
		}else{
			return DSC_OFERTA;
		}
	}
	public void setDSC_OFERTA(String dSC_OFERTA) {
		DSC_OFERTA = dSC_OFERTA;
	}
	public float getVLR_VENDA() {
		return VLR_VENDA;
	}
	public void setVLR_VENDA(float vLR_VENDA) {
		VLR_VENDA = vLR_VENDA;
	}
	public float getVLR_JUROS() {
		return VLR_JUROS;
	}
	public void setVLR_JUROS(float vLR_JUROS) {
		VLR_JUROS = vLR_JUROS;
	}
	public String getNUM_LOTE_PGTO() {
		if (NUM_LOTE_PGTO == null){
			return "";
		}else{
			return NUM_LOTE_PGTO;
		}
	}
	public void setNUM_LOTE_PGTO(String nUM_LOTE_PGTO) {
		NUM_LOTE_PGTO = nUM_LOTE_PGTO;
	}
	public float getVLR_CLARO_CLUBE() {
		return VLR_CLARO_CLUBE;
	}
	public void setVLR_CLARO_CLUBE(float vLR_CLARO_CLUBE) {
		VLR_CLARO_CLUBE = vLR_CLARO_CLUBE;
	}
	public String getDSC_TRUECOMP() {
		if (DSC_TRUECOMP == null){
			return "";
		}else{
			return DSC_TRUECOMP;
		}
	}
	public void setDSC_TRUECOMP(String dSC_TRUECOMP) {
		DSC_TRUECOMP = dSC_TRUECOMP;
	}
	public String getDSC_EXCECAO_TC() {
		if (DSC_EXCECAO_TC == null){
			return "";
		}else{
			return DSC_EXCECAO_TC;
		}
	}
	public void setDSC_EXCECAO_TC(String dSC_EXCECAO_TC) {
		DSC_EXCECAO_TC = dSC_EXCECAO_TC;
	}
	public String getORDER_ID() {
		if (ORDER_ID == null){
			return "";
		}else{
			return ORDER_ID;
		}
	}
	public void setORDER_ID(String oRDER_ID) {
		ORDER_ID = oRDER_ID;
	}
	public String getACCOUNT_ID() {
		if (ACCOUNT_ID == null){
			return "";
		}else{
			return ACCOUNT_ID;
		}
	}
	public void setACCOUNT_ID(String aCCOUNT_ID) {
		ACCOUNT_ID = aCCOUNT_ID;
	}
	public String getDSC_REGULARIZACAO() {
		if (DSC_REGULARIZACAO == null){
			return "";
		}else{
			return DSC_REGULARIZACAO;
		}
	}
	public void setDSC_REGULARIZACAO(String dSC_REGULARIZACAO) {
		DSC_REGULARIZACAO = dSC_REGULARIZACAO;
	}	
}

E na Classe de DAO

/* Metodo de consulta no banco de dados */
	private List<Hist_Consolidado_2014> consultar(String pLogin,String pCondicao){
		
		String vLogin = null;
		
		EntityManager entityManager = getEntityManager();
		String vSQL  = " a from Hist_Consolidado_2014 a";
			   vSQL += " join Tmp_Ntc b  ";
			   //vSQL += " a.num_ntc = b.num_ntc";
			   
		int vPos = pLogin.indexOf("-");
		
		if (vPos != -1){
			vLogin = pLogin.substring(0, vPos-2);
			
			vSQL += " WHERE b.NUM_LOGIN = '"+vLogin+"'";
		}
		
		if (pCondicao != null){
			vSQL += " AND " + pCondicao;
		}
		
		vSQL += " ORDER BY a.NUM_ID";
		System.out.println("Consulta executada : " + vSQL);
		
		Query vQuery = entityManager.createQuery(vSQL);		
		@SuppressWarnings("unchecked")
		List<Hist_Consolidado_2014> listaHist = vQuery.getResultList();
		return listaHist;		
	}

Porem apresenta o seguinte erro

O exemplo do site que me passou não consegui entender como fazer , poderia me ajudar a entender ?

grato