Dúvidas nos métodos de empréstimos - como cadastrar varias obras em um empréstimo

Olá. Estou criando um sistema para controle de biblioteca.
Estou utilizando Hibernate, NetBeans e SQL Server 2008.

Estou com dúvidas de como faço os métodos para realização de empréstimos.
Na interface gráfica tenho campos que:
[list]Recebem o nome do aluno em um Jcombox;[/list]
[list]Recebem o nome do exemplar em um Jcombox e lança para uma Jtable (Isso eu ainda não consegui fazer… :frowning: );[/list]
[list]Indica a data de Emprestimo em uma Jtextfield;[/list]
[list]Indica a data de devolução em uma Jtextfield.[/list]

Tenho muitas dúvidas com relação aos métodos de empréstimo,
primeiro quero saber se tem como criar um método que pegue o código do usuário a partir de seu nome.
E como cadastrar os exemplares em um empréstimo, por exemplo, (sabendo que o usuário pode pegar ate 3 livros). Como faço isso? Uso o hibernate e ele usa um Collection.
veja os códigos que tentei fazer:

[code]private Emprestimo NovoEmprestimo;
List obras;
List usuarios;
int i;
DefaultTableModel TmObras;

private void AddObra() {
    TmObras = (DefaultTableModel) jTable1.getModel();
    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    obras = session.createQuery("FROM Obra where CodObra = " + jTextField4.getText().trim()).list();
    while (TmObras.getRowCount() > 0) {
        TmObras.removeRow(0);
    }
    if (obras.isEmpty()) {
        JOptionPane.showMessageDialog(null, "Nenhum Obra encontrada.");
    } else {
        String[] campos = new String[]{null, null};
        for (int j = 0; j < obras.size(); j++) {
            TmObras.addRow(campos);
            TmObras.setValueAt(obras.get(j).getCodObra(), j, 0);
            TmObras.setValueAt(obras.get(j).getTitulo(), j, 1);
        }

    }
    session.close();
}

public Emprestimo preencherCamposEmprestimo(Emprestimo emprestimo) {
    Usuario usuario = new Usuario();
    ArrayList<Exemplar> exemplares = null;
    emprestimo.setCodUsuario(usuario);
    //emprestimo.setDaEmprestimo();
    // emprestimo.setDaDevolucao();
    emprestimo.setExemplar(exemplares);
    return emprestimo;
}

private void ListarUsuario() {
    Session session = HibernateUtil.getSessionFactory().openSession();
    session.beginTransaction();
    usuarios = session.createQuery("FROM Usuario").list();
    if (usuarios.isEmpty()) {
        JOptionPane.showMessageDialog(null, "Nenhum registro de Usuário foi encontrado.");
    } else {
        jComboBox1.removeAllItems();
        for (int i = 0; i < usuarios.size(); i++) {
            jComboBox1.addItem(usuarios.get(i).getNome());
        }
        session.close();
    }
}

private void MostrarDataEmprestimoAtual() {
    String data = (new java.text.SimpleDateFormat("dd/MM/yyyy").format(new java.util.Date(System.currentTimeMillis())));
    // O método setPlaceholderCharacter('_'); Define o lugar onde o usuário deve preencher.
    mascara.setPlaceholderCharacter('_');
    JFormattedTextField jtf = new JFormattedTextField(mascara);
    jFormattedTextField1.setText(data);
}

}[/code]

Para ter o código co Usuário faça esse método retornar o usuario localizado. Assim terá o código.

private void ListarUsuario() { Session session = HibernateUtil.getSessionFactory().openSession(); session.beginTransaction(); usuarios = session.createQuery(&quot;FROM Usuario&quot;).list(); if (usuarios.isEmpty()) { JOptionPane.showMessageDialog(null, &quot;Nenhum registro de Usuário foi encontrado.&quot;); } else { jComboBox1.removeAllItems(); for (int i = 0; i &lt; usuarios.size(); i++) { jComboBox1.addItem(usuarios.get(i).getNome()); } session.close(); } }

Olá Romarcio.

Onde crio este método?

Olá.

Tentei fazer um teste antes de ir para implementação na interface gráfica.

Fiz o seguinte:

public class RealizandoEmprestimo {

    public static void main(String[] args) {

        Session sessao = HibernateUtil.getSessionFactory().openSession();
        Transaction transacao = sessao.beginTransaction();

        // EmprestimoDAO emprestimoDAO = new EmprestimoDAO();
        ExemplarDAO exemplarDAO = new ExemplarDAO();
        Emprestimo emprestimo = new Emprestimo();

        Usuario usuario = (Usuario) sessao.load(Usuario.class, 6);

        emprestimo.setCodUsuario(usuario);
        emprestimo.setDaEmprestimo(new Date());
        emprestimo.setDaDevolucao(new Date());

        Exemplar exemplObra2 = exemplarDAO.findById(24);
        
        if (exemplObra2.getInConsulta() != 1 && exemplObra2.getInEmprestimo() != 1) {
            emprestimo.getExemplar().add(exemplObra2);

        } else {
            JOptionPane.showMessageDialog(null, "Esté não pode ser emprestado!");
        }

        sessao.save(emprestimo);
        transacao.commit();
        sessao.close();

    }
}

Quando eu tento rodar dá o seguinte erro:
[color=red]Exception in thread “main” java.lang.NullPointerException
at Teste.RealizandoEmprestimo.main(RealizandoEmprestimo.java:45)
Java Result: 1[/color]

Aqui no meu código, a linha 45 é:

O NullPointer é o erro mais fácil de se encontrar e resolver.
Seu emprestimo.getExemplar() deve estar nulo.
Coloque um if testanto isso.

Olá fsfnit!

Era uns erros de annotations do hibernate que tava dando esse erro de nullexception. Annotations referentes ao ManytoMany que tava referenciando duas classes ao mesmo tempo. Aí por isso que tava dando erro.

Valeu. :smiley: