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

2 respostas
B

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:

public class Veiculo {

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

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

2 Respostas

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

B

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

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

Criado 25 de julho de 2013
Ultima resposta 25 de jul. de 2013
Respostas 2
Participantes 2