Olá!
Estou desenvolvendo uma aplicação Desktop de controle de biblioteca.
Utilizo NetBeans 7.0 + SQL Server 2008 + Hibernate.
Estou em dúvida de como se faz um cadastro de uma classe que tem herança de outra usando uma relação de muitos pra muitos, que no caso aqui é de ItemBiblioteca tem Muitos autores e um autor está em varios itens.
Para ficar mais claro, vou mostrar os códigos da super classe e de uma subclasse.
Classe ItemBiblioteca (é a super classe):
package br.com.Dominio;
import java.io.Serializable;
import java.util.Collection;
import java.util.Date;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Inheritance;
import javax.persistence.InheritanceType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.xml.bind.annotation.XmlTransient;
@Entity
@Table(name = "ItemBiblioteca", catalog = "ControleBibliotecario", schema = "dbo")
@Inheritance(strategy= InheritanceType.JOINED)
public class ItemBiblioteca implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy= GenerationType.AUTO)
@Basic(optional = false)
@Column(name = "CodItemBiblioteca", nullable = false)
private Integer codItemBiblioteca;
@Basic(optional = false)
@Column(name = "TxTitulo", nullable = false, length = 100)
private String txTitulo;
@Basic(optional = false)
@Column(name = "NuReferencia", nullable = false)
private int nuReferencia;
@Basic(optional = false)
@Column(name = "NuEdicao", nullable = false)
private int nuEdicao;
@Basic(optional = false)
@Column(name = "NuAnoEdicao", nullable = false)
private int nuAnoEdicao;
@Basic(optional = false)
@Column(name = "NuExemplar", nullable = false)
private int nuExemplar;
@Column(name = "TxObservacao", length = 100)
private String txObservacao;
@Basic(optional = false)
@Column(name = "DaCadastro", nullable = false)
@Temporal(TemporalType.TIMESTAMP)
private Date daCadastro;
@OneToMany(cascade = CascadeType.ALL, mappedBy = "itemBiblioteca")
private Collection<ItemBibliotecaAutor> itemBibliotecaAutorCollection;
@OneToMany(mappedBy = "codItemBiblioteca")
private Collection<Exemplar> exemplarCollection;
@JoinColumn(name = "CodSecao", referencedColumnName = "CodSecao")
@ManyToOne
private Secao codSecao;
@JoinColumn(name = "CodEditora", referencedColumnName = "CodEditora")
@ManyToOne
private Editora codEditora;
public ItemBiblioteca() {
}
public ItemBiblioteca(Integer codItemBiblioteca) {
this.codItemBiblioteca = codItemBiblioteca;
}
public ItemBiblioteca(Integer codItemBiblioteca, String txTitulo, int nuReferencia, int nuEdicao, int nuAnoEdicao, int nuExemplar, Date daCadastro) {
this.codItemBiblioteca = codItemBiblioteca;
this.txTitulo = txTitulo;
this.nuReferencia = nuReferencia;
this.nuEdicao = nuEdicao;
this.nuAnoEdicao = nuAnoEdicao;
this.nuExemplar = nuExemplar;
this.daCadastro = daCadastro;
}
public Integer getCodItemBiblioteca() {
return codItemBiblioteca;
}
public void setCodItemBiblioteca(Integer codItemBiblioteca) {
this.codItemBiblioteca = codItemBiblioteca;
}
public String getTxTitulo() {
return txTitulo;
}
public void setTxTitulo(String txTitulo) {
this.txTitulo = txTitulo;
}
public int getNuReferencia() {
return nuReferencia;
}
public void setNuReferencia(int nuReferencia) {
this.nuReferencia = nuReferencia;
}
public int getNuEdicao() {
return nuEdicao;
}
public void setNuEdicao(int nuEdicao) {
this.nuEdicao = nuEdicao;
}
public int getNuAnoEdicao() {
return nuAnoEdicao;
}
public void setNuAnoEdicao(int nuAnoEdicao) {
this.nuAnoEdicao = nuAnoEdicao;
}
public int getNuExemplar() {
return nuExemplar;
}
public void setNuExemplar(int nuExemplar) {
this.nuExemplar = nuExemplar;
}
public String getTxObservacao() {
return txObservacao;
}
public void setTxObservacao(String txObservacao) {
this.txObservacao = txObservacao;
}
public Date getDaCadastro() {
return daCadastro;
}
public void setDaCadastro(Date daCadastro) {
this.daCadastro = daCadastro;
}
@XmlTransient
public Collection<ItemBibliotecaAutor> getItemBibliotecaAutorCollection() {
return itemBibliotecaAutorCollection;
}
public void setItemBibliotecaAutorCollection(Collection<ItemBibliotecaAutor> itemBibliotecaAutorCollection) {
this.itemBibliotecaAutorCollection = itemBibliotecaAutorCollection;
}
@XmlTransient
public Collection<Exemplar> getExemplarCollection() {
return exemplarCollection;
}
public void setExemplarCollection(Collection<Exemplar> exemplarCollection) {
this.exemplarCollection = exemplarCollection;
}
public Secao getCodSecao() {
return codSecao;
}
public void setCodSecao(Secao codSecao) {
this.codSecao = codSecao;
}
public Editora getCodEditora() {
return codEditora;
}
public void setCodEditora(Editora codEditora) {
this.codEditora = codEditora;
}
@Override
public int hashCode() {
int hash = 0;
hash += (codItemBiblioteca != null ? codItemBiblioteca.hashCode() : 0);
return hash;
}
@Override
public boolean equals(Object object) {
// TODO: Warning - this method won't work in the case the id fields are not set
if (!(object instanceof ItemBiblioteca)) {
return false;
}
ItemBiblioteca other = (ItemBiblioteca) object;
if ((this.codItemBiblioteca == null && other.codItemBiblioteca != null) || (this.codItemBiblioteca != null && !this.codItemBiblioteca.equals(other.codItemBiblioteca))) {
return false;
}
return true;
}
@Override
public String toString() {
return "br.com.Dominio.ItemBiblioteca[ codItemBiblioteca=" + codItemBiblioteca + " ]";
}
}
E a subclasse CDDVD:
package br.com.Dominio;
import java.io.Serializable;
import java.util.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
@Entity
@PrimaryKeyJoinColumn(name="CodItemBiblioteca")
@Table(name = "CDDVD", catalog = "ControleBibliotecario", schema = "dbo")
public class Cddvd extends ItemBiblioteca implements Serializable {
private static final long serialVersionUID = 1L;
@Column(name = "TxConteudo", nullable = false, length = 20)
private String txConteudo;
@Column(name = "NuDuracao")
@Temporal(TemporalType.TIME)
private Date nuDuracao;
@JoinColumn(name = "CodTipoCDDVD", referencedColumnName = "CodTipoCDDVD")
@ManyToOne
private TipoCDDVD codTipoCDDVD;
public Cddvd() {
}
public Cddvd(String txConteudo) {
this.txConteudo = txConteudo;
}
public String getTxConteudo() {
return txConteudo;
}
public void setTxConteudo(String txConteudo) {
this.txConteudo = txConteudo;
}
public Date getNuDuracao() {
return nuDuracao;
}
public void setNuDuracao(Date nuDuracao) {
this.nuDuracao = nuDuracao;
}
public TipoCDDVD getCodTipoCDDVD() {
return codTipoCDDVD;
}
public void setCodTipoCDDVD(TipoCDDVD codTipoCDDVD) {
this.codTipoCDDVD = codTipoCDDVD;
}
@Override
public String toString() {
return "br.com.Dominio.Cddvd[ codItemBiblioteca=" + getCodItemBiblioteca() + " ]";
}
}
Utilizo o seguinte código de teste:
package br.com.Testes;
import br.com.Dominio.Autor;
import br.com.Dominio.Cddvd;
import br.com.Dominio.Editora;
import br.com.Dominio.ItemBibliotecaAutor;
import br.com.Dominio.Secao;
import br.com.Dominio.TipoCDDVD;
import br.com.Persistencia.CddvdDAO;
import br.com.Persistencia.HibernateUtil;
import java.util.Collection;
import java.util.Date;
import org.hibernate.Criteria;
import org.hibernate.Session;
public class TesteConexao {
public static void main(String[] args) {
Session secao = HibernateUtil.getSessionFactory().openSession();
Editora editora = (Editora) secao.load(Editora.class,4);
Secao s = (Secao) secao.load(Secao.class, 4);
TipoCDDVD CddvdTipo = (TipoCDDVD) secao.load(TipoCDDVD.class, 1);
Criteria criteria = secao.createCriteria(Autor.class);
Collection<Autor> a = (Collection<Autor>) criteria.list();
CddvdDAO cddvd = new CddvdDAO();
Cddvd c = new Cddvd();
c.setTxTitulo("A criação");
c.setNuReferencia(123455657);
c.setNuEdicao(2);
c.setNuAnoEdicao(2010);
c.setNuExemplar(45);
c.setTxObservacao("Gravado em Nova York");
c.setCodEditora(editora);
c.setCodSecao(s);
c.setItemBibliotecaAutorCollection(a);
c.setTxConteudo("");
c.setNuDuracao(new Date());
c.setCodTipoCDDVD(CddvdTipo);
}
}
Como mostra o código de teste, estou tentando usar o criteria mas não sei como.
Podem me ajudar?
Obrigada! 

