Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

@ManyToOne criando tabela intermediaria

Hibernate está criando uma tabela intermediária para um relacionamento ManyToOne. Porque isso acontece? Não deveria ser apenas para ManyToMany?

EXPLICANDO:

No meu sistema Clientes podem ter mais de um Endereço. Mas a entidade Endereço é independente, até porque é acessada por várias outras entidades (não possuindo chave-estrangeira para todas estas).

CÓDIGO:

Cliente

@Entity(name = "cliente")
final public class Cliente {

    @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @OneToOne
    private Usuario usuario;

    @OneToMany
    private List<Endereco> endereco = new ArrayList<>();

    @OneToMany(mappedBy = "cliente", cascade = CascadeType.ALL)
    private List<Cartao> cartao = new ArrayList<>();
    private String nome;
    private String sobrenome;
    private String cpf;
    private String phone;
    private Timestamp data_nascimento;
    private short idade;
    private char sexo;
    private short votos;

}

Endereco

@Entity(name = "endereco")
final public class Endereco {

    @Id  @GeneratedValue(strategy = GenerationType.IDENTITY)
    private int id;

    @ManyToOne
    private Cidade cidade;
    private String cep;
    private String rua;
    private short numero;
    private String complemento;
    private String bairro;

}
2 respostas
solução!

Oi João

Você pode evitar esta tabela se especificar a coluna de chave estrangeira com uma anotação @JoinColumn . Esta coluna deve fazer parte da tabela do lado para-muitos da associação. Portanto, neste exemplo, a tabela de cliente deve ter uma coluna fk_endereco_id que armazena uma chave estrangeira para a tabela Endereco .

@OneToMany
    @JoinColumn(name = "id")
private List<Endereco> endereco = new ArrayList<>();

Valeu Otávio. Isso resolveu meu problema. Eu já tinha lido a respeito mas não ficou completamente claro. Agora compreendi melhor a questão. Vlw