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
}
Coloque seus códigos entre as tags code que fica mais fácil de ler.
[code]
@Entity
public class Conhecimento {
@Id
@GeneratedValue
@Column(name="cd_codigo_conhecimento")
private Integer id;
@Column(nullable=false)
private String name;
//Gets e Sets omitidos
}[/code]
[code]@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
}[/code]
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).