Estou com dúvida sobre como mapear coleção, estava vendo os exemplo do doc do hibernate mas não ajudaram mt.
Vou postar o que fiz até agora, e vão me corrigindo. Tenho uma tabela artista e tera mts musicas, por tanto relacionamento 1:*
Musica
package artista;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "musica")
public class Musica {
@SequenceGenerator(name = "sequence_musica", sequenceName = "sequence_musica")
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "sequence_musica")
private int id;
@Column(name = "nome", nullable = false, length = 25)
private String nome;
@ManyToOne
@JoinColumn(name="codArtista")
private Artista artista;
public Musica(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Artista getArtista() {
return artista;
}
public void setArtista(Artista artista) {
this.artista = artista;
}
}
Artista
package artista;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "artista")
public class Artista {
@SequenceGenerator(name = "sequence_artista", sequenceName = "sequence_artista")
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "sequence_artista")
private int id;
@Column(name = "nome", nullable = false, length = 25)
private String nome;
@OneToMany(mappedBy="id")
private List<Musica> lista = new ArrayList<Musica>();
public Artista(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Musica> getLista() {
return lista;
}
public void setLista(List<Musica> lista) {
this.lista = lista;
}
}
Base de dados:
create table artista (id int, nome varchar2(25));
alter table artista add constraint pk_artista primary key (id);
create sequence sequence_artista increment by 1;
create table musica (id int, nome varchar2(25), codArtista int);
alter table musica add constraint pk_musica primary key (id);
create sequence sequence_musica increment by 1;
ALTER TABLE musica add constraint fk_musica_artista foreign key (codArtista) references artista (id);
Minha dúvida e justamente em como mapear o artista, em @OneToMany(mappedBy=“id”) no mappedBy vou apontar para o que?
Faça o seu relacionamento do lado da Tabela Artista que irá ficar assim:
package artista;
import java.util.ArrayList;
import java.util.List;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;
@Entity
@Table(name = "artista")
public class Artista {
@SequenceGenerator(name = "sequence_artista", sequenceName = "sequence_artista")
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "sequence_artista")
private int id;
@Column(name = "nome", nullable = false, length = 25)
private String nome;
@OneToMany(cascade=CascadeType.All, fetch=FetchType.LAZY)
private List<Musica> lista = new ArrayList<Musica>();
public Artista(){
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public List<Musica> getLista() {
return lista;
}
public void setLista(List<Musica> lista) {
this.lista = lista;
}
}
Porque quando vc persistir Artista, com o cascade setado na annotation, vc tb persistira as músicas relacionadas a esse artista. Não é necessário usar mappedby
log4j:WARN No appenders could be found for logger (org.hibernate.cfg.annotations.Version).
log4j:WARN Please initialize the log4j system properly.
Unknown entity: artista.Artista