Pessoal blzinha?
Estou fazendo mapeamentos com hibernate annotation e estou enfretando algumas dificuldades, tanto no oneToOne quanto no ManyToMany.
Segue abaixo elas:
[color=brown]1- Tenho duas classes, PC e placaMae, elas estao persistindo perfeitamente, como podem ver o mapeamento e de 1 para 1.[/color]
@Entity
@Table(name="Pc",schema="annotation")
public class PC extends BeanAbstrato implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private Integer id;
@Column(name="nome",length=50)
private String nome;
@Column(name="preco",precision=20,scale=2)
private BigDecimal preco;
@OneToOne(cascade=CascadeType.PERSIST)
@JoinColumn(nullable=false)
private PlacaMae placaMae;
public PC(Integer id, String nome, BigDecimal preco, PlacaMae placaMae) {
super();
this.id = id;
this.nome = nome;
this.preco = preco;
this.placaMae = placaMae;
}
public PC() {
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public BigDecimal getPreco() {
return preco;
}
public void setPreco(BigDecimal preco) {
this.preco = preco;
}
public PlacaMae getPlacaMae() {
return placaMae;
}
public void setPlacaMae(PlacaMae placaMae) {
this.placaMae = placaMae;
}
}
@Entity
@Table(name="PlacaMae",schema="annotation")
public class PlacaMae extends BeanAbstrato implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private Integer id;
@Column(name="marca",length=50)
private String marca;
@Temporal(TemporalType.DATE)
@Column(name="fabricacao",nullable=false)
private Date fabricacao;
@Column(name="preco",nullable=false,precision=20,scale=2)
private BigDecimal preco;
public PlacaMae() {
}
public PlacaMae(Integer id, String marca, Date fabricacao, BigDecimal preco) {
this.id = id;
this.marca = marca;
this.fabricacao = fabricacao;
this.preco = preco;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getMarca() {
return marca;
}
public void setMarca(String marca) {
this.marca = marca;
}
public Date getFabricacao() {
return fabricacao;
}
public void setFabricacao(Date fabricacao) {
this.fabricacao = fabricacao;
}
public BigDecimal getPreco() {
return preco;
}
public void setPreco(BigDecimal preco) {
this.preco = preco;
}
}
A minha duvida é como faco para que o id da minha classe PC seja FK vindo de PlacaMae??Gostaria que tivesse em PC uma chave primaria simples, sendo ela o id de placaMae.
Eu estou pesquisando isso a algumas semanas, e peço a gentileza, se puderem me ajudar com exemplos, referencias, de qualquer forma.
[color=brown]2- Como podem ver abaixo, tenho duas classes, Aluno e Curso, o relacionamento entre elas e n para n.[/color]
@Entity
@Table(name="aluno")
public class Aluno extends BeanAbstrato implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private Integer id;
@Column(name="nome",nullable=false,length=50)
private String nome;
@Column(name="matricula",nullable=false)
@Temporal(TemporalType.DATE)
private Date matricula;
@Column(name="endereco",nullable=false,length=100)
private String endereco;
public Aluno() {
}
public Aluno(Integer id, String nome, Date matricula, String endereco) {
super();
this.id = id;
this.nome = nome;
this.matricula = matricula;
this.endereco = endereco;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public Date getMatricula() {
return matricula;
}
public void setMatricula(Date matricula) {
this.matricula = matricula;
}
public String getEndereco() {
return endereco;
}
public void setEndereco(String endereco) {
this.endereco = endereco;
}
}
@Entity
@Table(name="curso")
public class Curso extends BeanAbstrato implements Serializable {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
private Integer id;
@Column(name="nome",nullable=false,length=30)
private String nome;
@Column(name="descricao",nullable=false,length=30)
private String descricao;
@Column(name="cargahoraria",nullable=false,length=4)
private Integer cargahoraria;
@ManyToMany(cascade=CascadeType.ALL,fetch=FetchType.EAGER)
@JoinTable(name="curso_aluno",schema="annotation",
joinColumns={@JoinColumn(name="cursos_id")},
inverseJoinColumns={@JoinColumn(name="alunod_id")})
private Set<Aluno> alunos = new HashSet<Aluno>();
public Curso() {
}
public Curso(Integer id, String nome, String descricao, Integer cargahoraria,
Set<Aluno> alunos) {
super();
this.id = id;
this.nome = nome;
this.descricao = descricao;
this.cargahoraria = cargahoraria;
this.alunos = alunos;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getDescricao() {
return descricao;
}
public void setDescricao(String descricao) {
this.descricao = descricao;
}
public Integer getCargahoraria() {
return cargahoraria;
}
public void setCargahoraria(Integer cargahoraria) {
this.cargahoraria = cargahoraria;
}
public Set<Aluno> getAlunos() {
return alunos;
}
public void setAlunos(Set<Aluno> alunos) {
this.alunos = alunos;
}
}
Esse e o script que estou utilizando para a criacao das tabelas no PostGresql:
create table curso(
id integer not null,
descricao varchar(30) not null,
cargahoraria int4 not null,
nome varchar(30) not null,
primary key(id)
);
create table aluno(
id integer not null,
matricula date not null,
endereco varchar(100) not null,
nome varchar(50) not null,
primary key(id)
);
create table curso_aluno(
cursos_id integer not null,
alunos_id integer not null,
primary key(cursos_id,alunos_id),
foreign key(cursos_id) references curso(id),
foreign key(alunos_id) references aluno(id)
);
A persistencia nas entidades Aluno e Curso esta ocorrendo perfeitamente, minha duvida é, como faço para que seja feito a persistencia na entidade curso_aluno
sempre que for inserido um aluno ou curso, ou ambos?qual é a forma mais correta disto ocorrer?Não é necessario eu criar um bean para essa entidade né??
Agradeço a atençao de todos