Dúvida @SecondaryTable

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?

Cara, pelo exemplo da sua classe “Cliente”, acho que não tá legal o caminho que você está tomando.
Se é que posso opnar, eu usaria composição nesta classe com Cidade, com simples joinColumn. E se você está usando Hibernate como provedor JPA, dá prá usar Projections para fazer uma consulta que lhe devolva apenas a descricao da cidade junto com os campos de Cliente. A idéia é vc fazer uma consulta que lhe devolta o que vc quer:

Ao invés de:

SELECT [...] FROM Cliente LEFT JOIN Cidade ON Cidade.Codigo = Cliente.Cidade

Retornar:

SELECT Cliente.Id, Cliente.Descricao, Cidade.Descricao FROM Cliente LEFT JOIN Cidade ON Cidade.Codigo = Cliente.Cidade

Na minha opnião, você pode mapear naturalmente as entidades, deixando cada atributo na sua devida classe, e fazer a consulta lhe devolver apenas o que você quer.