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:
Wrong column type in transporte.veiculo for column id_ano_modelo. Found: int4, expected: bigint
- Quando mudo o tipo para int, o erro dá no tipo do primary key:
Wrong column type in transporte.ano_modelo for column id_ano_modelo. Found: bigserial, expected: integer
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