[DÚVIDA] Como criar entitdades no relacionamento @OneToMany

1 resposta
aspmedeiros

Queria saber se está correto, eu quero criar essas tabelas no banco de dados usando hibernate tem algo errado? Pq tipo eu tentei usar mappedBy dentro da anotação @OneToMany mas na hora de gerar o esquema no banco eu recebo uma exceção, então eu resolvi usar o joinTable, assim está correto?

@Entity
public class Conhecimento {

@Id
  @GeneratedValue
  @Column(name="cd_codigo_conhecimento")
  private Integer id;
  
  @Column(nullable=false)
  private String name;

  //Gets e Sets omitidos

}

@Entity
public class Pessoa{

@Id
  @GeneratedValue
  @Column(name="cd_codigo_pessoa")
  private Integer id;

  private String name;

  @OneToMany
  @JoinTable(
         name="lista_conhecimentos",
         joinColumns = { @JoinColumn=(name="cd_codigo_conhecimento")},
         inverseJoinColumns = {@JoinColumn=(name="cd_codigo_pessoa")}
  )
  private List<Conhecimento> conhecimentos;

 //Gets e sets omitidos

}

1 Resposta

Andre_Brito

Coloque seus códigos entre as tags code que fica mais fácil de ler.

@Entity 
public class Conhecimento { 

    @Id 
    @GeneratedValue 
    @Column(name="cd_codigo_conhecimento") 
    private Integer id; 

    @Column(nullable=false) 
    private String name; 

    //Gets e Sets omitidos

}
@Entity 
public class Pessoa { 

    @Id 
    @GeneratedValue 
    @Column(name="cd_codigo_pessoa") 
    private Integer id; 

    private String name; 

    @OneToMany 
    @JoinTable( 
        name="lista_conhecimentos", 
        joinColumns = { @JoinColumn=(name="cd_codigo_conhecimento")}, 
        inverseJoinColumns = {@JoinColumn=(name="cd_codigo_pessoa")} 
    ) 
    private List<Conhecimento> conhecimentos; 

    //Gets e sets omitidos

}

Geralmente, quando se usar OneToMany se usa também algum tipo de Cascade. Não sei te dizer se é necessário, mas é muito normal de se ver.

Quando eu uso joinColumns, não uso desse tipo que você usa. Pode ser erro aí. Eu usaria assim:
@OneToMany(cascade = CascadeType.ALL)
@JoinTable(
    name = "pessoa_conhecimento",
    joinColumns = @JoinColumn(name = "Pessoa_ID"),
    inverseJoinColumns = @JoinColumn(name = "Conhecimento_ID"))
private List<Conhecimento> listaDeConhecimentos;
Pensando de outra forma, acho que você usa "{" e "}" quando existe mais de uma coluna. De qualquer forma, tenta mudar as coisas que falei e posta o resultado. Se ainda não foi resolvido, coloca o nome da Exception que aparece.

[Editado]
O nome da tabela usada no join não é pessoa conhecimento, mas sim pessoa_conhecimento (com underline).

Criado 3 de outubro de 2009
Ultima resposta 3 de out. de 2009
Respostas 1
Participantes 2