Ajuda com Hibernate (@OneToOne)

Estou com um problema em mapear o relacionamento de uma classe @OneToOne, já tentei diversas formas porém o Hibernate não cria corretamente o banco e não consegue fazer o relacionamento do jeito que preciso…

Resumidamente a estrutura é a seguinte:
Tenho as classes ProdutoBean, TamanhoBean, ProdutoTamanhoBean, PedidoBean e ItensPedidoBean.
Na classe ProdutoBean tenho uma lista de ProdutoTamanho, que são os tamanhos do produto, juntamente com seu valor.
Na classe TamanhoBean tenho uma lista com os Produtos que tem aquele tamanho.
Na classe ProdutoTamanhoBean, tenho um produto e um tamanho.
Na classe ItensPedidoBean tenho um PedidoBean e um ProdutoTamanhoBean, porém o Hibernate não cria a FK para a tabela ProdutoTamanho (que seria uma simples tabela N-N caso não houvesse preço diferenciado por produto e tamanho, por isso criei essa classe).

Alguém poderia ajudar ou dar um norte de como fazer o bendito Hibernate relacionar a classe ItensPedido com a ProdutoTamanho corretamente?
Ele simplesmente ignora e não cria coluna alguma…
Agradeço desde já.

edit: alterei para relação @ManyToOne e não sei diabos porque deu certo agora (já tinha feito antes de postar o tópico), mas deu… valeu!

Segue os códigos das classes.

Classe ProdutoBean

@Entity
@Table(name="Produtos")
public class ProdutoBean implements Serializable, Cloneable {

    @Id
    @GeneratedValue
    private int codigo;

    @Column(length=100, nullable=false)
    private String nome;

    @Column(length=255, nullable=true)
    private String descricao;
    
    @Temporal(value = TemporalType.TIMESTAMP)
    private Date dataCadastro;

    @ManyToMany
    private List<CorBean> cores;

    @OneToMany(mappedBy="produto")
    private List<ProdutoTamanhoBean> tamanhos;

    // getters e setters
}

Classe TamanhoBean

@Entity
@Table(name="Tamanhos")
public class TamanhoBean implements Serializable, Cloneable {
    @Id
    @GeneratedValue
    private int codigo;

    @Column(length=5, nullable=false)
    private String descricao;

    @OneToMany(mappedBy="tamanho")
    private List<ProdutoTamanhoBean> produtos;

    // getters e setters
}

Classe ProdutoTamanhoBean

@Entity
@Table(name="Produtos_Tamanhos")
public class ProdutoTamanhoBean implements Serializable, Cloneable {

    @Id
    @GeneratedValue
    private int codigo;

    @ManyToOne
    @JoinColumn(name="Produto_codigo", nullable=false)
    private ProdutoBean produto;

    @ManyToOne
    @JoinColumn(name="Tamanho_codigo", nullable=false)
    private TamanhoBean tamanho;

    @Column(nullable = false)
    private double valor;

    @Column(nullable = false)
    private boolean selected;

    // getters e setters
}

Classe PedidoBean

@Entity
@Table(name="Pedidos")
public class PedidoBean implements Serializable, Cloneable {
    @Id
    @GeneratedValue
    private int codigo;

    @Column(nullable=false)
    private int qtdTotal;

    @Column(nullable=false)
    private double desconto;

    @OneToOne
    private ClienteBean cliente;

    @OneToOne
    private VendedorBean vendedor;

    @OneToOne
    private TransportadoraBean transportadora;

    @OneToMany
    private List<ItensPedidoBean> itens;

    // getters e setters
}

Classe ItensPedidoBean

@Entity
@Table(name="Itens_Pedido")
public class ItensPedidoBean implements Serializable, Cloneable {
    @Id
    @GeneratedValue
    private int codigo;

    @OneToOne
    private PedidoBean pedido;

    @OneToOne
    private ProdutoTamanhoBean produto;

    @Column(nullable=false)
    private int qtd;

    @Column(nullable=false)
    private double valor;

    // getters e setters
}

Primeiramente indico a você ler bem sobre as naming conventions do Java. Beans são sufixos para EJBs, e não para entidades. Uma entidade é sempre o nome dela mesma, exemplo, Carro, Casa, etc. http://java.sun.com/blueprints/code/namingconventions.html

Não entendi muito bem a relação entre Produto e Tamanho. Mas a impressão que eu tenho é que um produto possui vários tamanhos, e um tamanho possui vários produtos. Ou seja, não deveria ser um ManyToMany? E nesse caso nem mesmo seria necessário a classe ProdutoTamanho.

Sim, seria um ManyToMany, porém não um “many-to-many” comum, pois na tabela “do meio” que deve ficar o valor e mais outras informações relacionadas, por isso a necessidade de “evoluir” o ManyToMany em uma entidade…

Quanto as nomenclaturas, depois eu modifico
valeu ^^

Guilherme, relendo seu post agora notei que você já havia explicado a necessidade dessa tabela. Lí ontem meio sonolento, por isso, hahahaha. E pior, só agora ví que você conseguiu resolver o problema.

Abraços