[RESOLVIDO] Hibernate: primary key e foreign key com tipos diferentes

Bom dia pessoal,

Estou com um problema meio estranho no mapeamento de um BD Postgres, que eu não possuo permissão para alterar.
Neste BD há uma tabela ano_modelo, cuja chave primária é a coluna id_ano_modelo, do tipo bigserial (basicamente um bigint positivo).
Tabém temos uma tabela veiculo que se relaciona com a ano_modelo através de uma coluna também chamada id_ano_modelo.
Até aí tudo bem. O problema é que a coluna em veículo é do tipo int4 e em ano_modelo é bigserial.
Não entendo como o Postgres deixou colunas de tipos distintos se referenciarem, porém isso aconteceu.

O problema todo está no meu acesso com hibernate a essa estrutura.

Tenho uma classe Veículo, que entre outras coisas têm o código abaixo:

[code]public class Veiculo {

@ManyToOne
@JoinColumn(name = "id_ano_modelo")
private AnoModeloVeiculo anoModelo;[/code]

E uma classe AnoModeloVeiculo:

public class AnoModeloVeiculo {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    @Column(name = "id_ano_modelo")
    private Long AnoModeloVeiculo.id;

Agora que vem o problema:

  • Quando o tipo do id da classe AnoModeloVeiculo é Long, a aplicação dá erro no tipo da coluna do relacionamento:
  • Quando mudo o tipo para int, o erro dá no tipo do primary key:

Quando eu desfaço o relacionamento e deixo long, não dá erro nenhum.
Alguém tem alguma ideia? Existe alguma maneira de forçar o hibernate a fazer cast?

Obrigado

Cara, vou dar um chute, então talvez eu fale bobeira. Não da pra usar a anotação @Type e contornar o problema?

[]'s

[quote=mauricioadl]Cara, vou dar um chute, então talvez eu fale bobeira. Não da pra usar a anotação @Type e contornar o problema?

[]'s[/quote]

Na verdade resolvi com a propriedade columundefinition, da seguinte forme:

@ManyToOne @JoinColumn(name = "id_ano_modelo", columnDefinition = "int4") private AnoModeloVeiculo anoModelo;

Agora tá 100%

Valeu