Bom dia!
Estou com a seguinte situação utilizando JPA.
Tenho duas tabelas no banco de dados (vou colocar aqui apenas os principais itens):
Cliente (
Id
int ,
Descricao
varchar ,
Cidade
int
)
Cidade (
Id
int ,
Descricao
varchar ,
Uf
varchar
)
Eu preciso exibir o bean em um datatable para pesquisa os dados do cliente e o nome da cidade, eu até então tenho um Bean de Cliente e onde tenho um @JoinColumn com Cidade, que me retorna um List de Cidade.
Porém é um grande volume de dados, e este list está pesando muito na hroa de carregar o datatable, e preciso exibir apenas um dado de Cidade (Descrição).
Neste link achei algo que iria me ajudar muito: http://uaihebert.com/?p=45 , que é o SecondaryTable
Então, fiz o seguinte no meu bean de Cliente:
@Entity
@Table ( name = "Cliente" )
@SecondaryTable(name = "Cidade", pkJoinColumns={@PrimaryKeyJoinColumn(name="Codigo")})
public class Cliente implements Serializable {
@Id
@Column(name = "Codigo", nullable = false)
private String codigo;
@Column(name = "Cidade", nullable = false)
private String cidade;
@Column(table="Cidade", name = "Descricao")
private String nomeCidade;
@Column(name = "Descricao", nullable = false)
private String descricao;
// ...
}
O problema é que o JPA está fazendo o seguinte sql:
SELECT […] FROM Cliente LEFT JOIN Cidade ON Cidade.Codigo = Cliente.Codigo
Quando na verdade ele teria que me retornar assim:
SELECT […] FROM Cliente LEFT JOIN Cidade ON Cidade.Codigo = Cliente.Cidade
Não encontrei nenhuma propriedade que eu possa setar qual o campo que eu devo relacionar Cidade com Cliente.
Existe como eu fazer esse tipo de relacionamento utilizando o SecondaryTable ?
Caso não tenha, alguém conhece uma solução melhor?