7
respostas

JPA COMO FAZER JOIN COM CRITERIA SEM A TABELA TER PK ?

Boa tarde,

Não estou conseguindo fazer um join em uma tabela que tenho no banco sem a PK. Essa tabela sem PK não posso mexer nela, então para resolver fiz da seguinte forma.

@Entity
@Table(name = "tbl_demandas_areas")
@IdClass(value=AreaAutomacoesAntigasPK.class)
public class AreaAutomacoesAntigasBean implements Serializable{

    @Id @GeneratedValue
    @Column(name = "ID_Original")
    private String idOriginal;

    @Id @GeneratedValue
    @Column(name = "TipoPrefixo", columnDefinition="TEXT")
    private String tipoPrefixo;

    @Id @GeneratedValue
    @Column(name = "Area", columnDefinition="TEXT")
    private String area;
}
public class AreaAutomacoesAntigasPK implements Serializable{

    private String idOriginal;
    private String tipoPrefixo;
    private String area;

E preciso fazer um criteria com o sequinte sql.

SELECT * 
FROM TBL_DEMANDAS INNER JOIN TBL__DEMANDAS_AREAS ON SOLICITACAO_ID = TBL__DEMANDAS_AREAS.ID_ORIGINAL

A tabela TBL_DEMANDAS não tem nenhum relacionamento mapeado com TBL_DEMANDA_AREAS pois essa tabela não tem PK.

Alguem pode me ajudar como devo fazer isso com criteria?

7 respostas

Oi Diego, não rola fazer joins pela JPA sem ter chaves primárias, estrangeiras.. A JPA exige tabelas normalizadas... O que vc pode fazer é criar classes, como vc já começou a fazer, que mapeiam para essas tabelas e ir colocando os atributos que representam as chaves...

Agora, se eu fosse implementar, faria uma sqlQuery normal , pegaria o resultado e mapearia para meus objetos, acho mais simples.

Voce poderia me informar como faço em JPQL o INNER JOIN ?

Sem classes mapeadas com as chaves, não dá. Caso tenha, eh só dá uma olhada no curso... Um exemplo simples: select c from Categoria c join c.produtos p where p.nome...

No caso eu quero trazer resultado de 2 tabelas.. eu preciso criar um classe a mais com esses resultados e fazer o JPQL ?

Diego, acho que o melhor eh vc fazer o curso... Suas perguntas são relacionadas a coisas mais fundamentais e o curso vai te ajudar.

No caso, continuar :).

Eu já tinha assistido todas as aulas, mas fui fazer a verificação para relembrar mas não achei sobre esse conteúdo que necessito. Você pode me dizer em qual parte do curso que está esse conteúdo?

Em pesquisas obtive a orientação para resolver meu caso, eu utilizei um JPQL

Query queryAreaAutomacoesAntigas = manager.createQuery("SELECT p, a FROM ProjetosExistentesAntigosBean p, AreaAutomacoesAntigasBean a WHERE p.solicitacaoId = a.idOriginal AND p.pastaVersao = :pPastaVersao AND p.obsoleto = :pObsoleto AND p.excluido = :pExcluido AND p.concluido = :pConcluido");

Só que agora preciso obter o resultado completo numa lista mas apenas estou conseguindo pegar o resultado em um tipo de list, ou sendo

List<ProjetosExistentesAntigosBean>

ou sendo List

<AreaAutomacoesAntigasBean>

Como posso obter a lista com os dados da junção dos 2 tabelas?

Grato!