Usando 2 Chaves Estrangeiras - VRaptor + Hibernate

E ai galera,
estou utlizando 2 chaves estrangeiras como chaves da minha tabela, porém na hora de usar isso no formulário é um tanto chato para passar dois campos, estive pensando em implementar Serializeble, porém, não sei como fazer para transformar o meu embeddebleID para o formulario.

Meu código:

@Entity
@Table(name = "Fornecedor_MateriaPrima") /* 245999857460995074L */
public class MateriaPrimaFornecedor implements Serializable{

    private static final long serialVersionUID = -245999857460995074L;

    @EmbeddedId
    private MateriaPrimaFornecedorPK id;

    private String codigo;

Minha ID

@Embeddable
public class MateriaPrimaFornecedorPK implements Serializable{

    private static final long serialVersionUID = 504213857862593268L;

    @ManyToOne(optional = false)
    private MateriaPrimaFabricante materiaPrima;

    @ManyToOne(optional = false)
    private Fornecedor fornecedor;

Bom, pois é gostaria de passar para o meu formulário, o MateriaPrimaFabricante e Fornecedor no mesmo campo.

#comofaz?

Abraços!

o serializable só vai funcionar se vc serializar o objeto e colocar dentro de uma string…

se o que vc só precisa é dos ids do fornecedor e da materiaPrima vc pode fazer o seguinte:

-sobrescreva o toString da PK para retornar os dois ids, por ex separados por vírugla
-crie um converter do vraptor que pega esses dois ids e transforma na pk desejada

Nesse caso faria um converter de String para MateriaPrimaFornecedorPK

tipo isso?

package br.com.rhfactor.converter;

import java.util.ResourceBundle;

import br.com.caelum.vraptor.Convert;
import br.com.caelum.vraptor.Converter;
import br.com.rhfactor.quimiflex.entidade.MateriaPrimaFornecedorPK;

@Convert(value = MateriaPrimaFornecedorPK.class)
public class MateriaPrimaFornecedorConverter implements Converter<MateriaPrimaFornecedorPK>{

    @Override
    public MateriaPrimaFornecedorPK convert(String valor, Class<? extends MateriaPrimaFornecedorPK> tipo, ResourceBundle bundle) {
	MateriaPrimaFornecedorPK pk = new MateriaPrimaFornecedorPK();
	String[] ids = valor.split(",");
	Long fornecedorId = (Long) Long.parseLong(ids[0].trim());
	Long materiaPrimaId = (Long) Long.parseLong(ids[0].trim());
	pk.getFornecedor().setId(fornecedorId);
	pk.getMateriaPrima().setId(materiaPrimaId);
	return pk;
    }

}

Porém, como uso isso?
kkkkkkkkkkkkkkkk

só tem algum campo num formulário ou coisa do tipo:

materiaPrimaFornecedor.id=33,55

Bom, Estou mesmo sem saber por onde começar!
Criei o Converter:

@ApplicationScoped
@Convert(value = MateriaPrimaFornecedorPK.class)
public class MateriaPrimaFornecedorConverter implements Converter<MateriaPrimaFornecedorPK>{

    @Override
    public MateriaPrimaFornecedorPK convert(String valor, Class<? extends MateriaPrimaFornecedorPK> tipo, ResourceBundle bundle) {
	MateriaPrimaFornecedorPK pk = new MateriaPrimaFornecedorPK();
	String[] ids = valor.split(",");
	Long fornecedorId = (Long) Long.parseLong(ids[0].trim());
	Long materiaPrimaId = (Long) Long.parseLong(ids[0].trim());
	pk.getFornecedor().setId(fornecedorId);
	pk.getMateriaPrima().setId(materiaPrimaId);
	return pk;
    }
}

E na minha classe PK Adicionei o método toString

@Embeddable
public class MateriaPrimaFornecedorPK implements Serializable{

    private static final long serialVersionUID = 504213857862593268L;

    @ManyToOne(optional = false)
    private MateriaPrimaFabricante materiaPrima;

    @ManyToOne(optional = false)
    private Fornecedor fornecedor;
    
    @Override
    public String toString() {
	return this.fornecedor.getId() + "," + this.materiaPrima.getId();
    }

Porém, no meu método no controller

  @Post
    @Path("/fornecedores/produtos/")
    public void adicionarProduto(MateriaPrimaFornecedor materiaPrimaFornecedor) {
	System.out.println(materiaPrimaFornecedor.getId());
    }

o valor desse syso é NULL.

como tá o formulário? o @Convert é do VRaptor?

O formulario está fornecedor.materiaPrimaFornecedor.id pois ha um cascade ai para o fornecedor.

se o parâmetro do controller é materiaPrimaFornecedor, no formulário deveria estar só materiaPrimaFornecedor.id