Bom dia amigos.
Estou com problemas para finalizar um emprestimo de locadora.
Após listar os nomes dos clientes num <s:select> e os filmes em outro <s:select> preciso realizar o cadastro do emprestimo.
O cadastro do emprestimo é realizado com sucesso, porém, após realizado o nome do cliente e do filme selecionado passam a ficar null no mysql.
Outra coisa é o excluir clientes ou filmes que estão relacionados com empréstimos.
está dando erro. É obrigatório criar indices no mysql para utilizar o @Cascade(CascadeType.ALL)?
obs: se não existir relação com empréstimo não da erro ao excluir.
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
@Cascade(CascadeType.ALL)
VEJAM A BEAM EMPRESTIMO
package br.com.x25.locadora.model.bean;
import java.sql.Date;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.Table;
import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.Fetch;
import org.hibernate.annotations.FetchMode;
@Entity
@Table(name="tb_emprestimo")
public class Emprestimo {
@Id
@Column(name="id_emprestimo")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@Column(name="dt_emprestimo")
private Date data;
@Column(name="vl_emprestimo")
private double valor;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="id_cliente", insertable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Cliente cliente;
@ManyToOne(fetch = FetchType.EAGER)
@JoinColumn(name="id_filme", insertable=true)
@Fetch(FetchMode.JOIN)
@Cascade(CascadeType.ALL)
private Filme filme;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public Date getData() {
return data;
}
public void setData(Date data) {
this.data = data;
}
public double getValor() {
return valor;
}
public void setValor(double valor) {
this.valor = valor;
}
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public Filme getFilme() {
return filme;
}
public void setFilme(Filme filme) {
this.filme = filme;
}
}
VEJAM A ACTION EMPRESTIMO
package br.com.x25.locadora.control;
import java.util.List;
import br.com.x25.locadora.model.bean.Cliente;
import br.com.x25.locadora.model.bean.Emprestimo;
import br.com.x25.locadora.model.bean.Filme;
import br.com.x25.locadora.model.dao.ClienteDao;
import br.com.x25.locadora.model.dao.EmprestimoDao;
import br.com.x25.locadora.model.dao.FilmeDao;
public class EmprestimoAction {
private Emprestimo emprestimo;
private List<Emprestimo> emprestimos;
private Filme filme;
private List<Filme> filmes;
private Cliente cliente;
private List<Cliente> clientes;
public Cliente getCliente() {
return cliente;
}
public void setCliente(Cliente cliente) {
this.cliente = cliente;
}
public List<Cliente> getClientes() {
return clientes;
}
public void setClientes(List<Cliente> clientes) {
this.clientes = clientes;
}
public List<Filme> getFilmes() {
return filmes;
}
public void setFilmes(List<Filme> filmes) {
this.filmes = filmes;
}
public Emprestimo getEmprestimo() {
return emprestimo;
}
public void setEmprestimo(Emprestimo emprestimo) {
this.emprestimo = emprestimo;
}
public List<Emprestimo> getEmprestimos() {
return emprestimos;
}
public void setEmprestimos(List<Emprestimo> emprestimos) {
this.emprestimos = emprestimos;
}
public Filme getFilme() {
return filme;
}
public void setFilme(Filme filme) {
this.filme = filme;
}
//cadastrar Emprestimo
public String inserirEmprestimo(){
new EmprestimoDao().inserirOUalterar(emprestimo);
return "index";
}
//listar Clientes e Filmes
public String listarTodos(){
clientes = new ClienteDao().listar();
filmes = new FilmeDao().listar();
return "combos";
}
}
VEJAM A DAO EMRESTIMO
package br.com.x25.locadora.model.dao;
import org.hibernate.Session;
import org.hibernate.SessionFactory;
import org.hibernate.Transaction;
import org.hibernate.cfg.AnnotationConfiguration;
import br.com.x25.locadora.model.bean.Emprestimo;
public class EmprestimoDao {
private SessionFactory f;
private Session s;
private Transaction t;
public EmprestimoDao() {
f = new AnnotationConfiguration().configure().buildSessionFactory();
s = f.openSession();
t = s.beginTransaction();
}
//inserir
public void inserirOUalterar(Emprestimo emprestimo){
s.saveOrUpdate(emprestimo);
t.commit();
s.close();
}
}
VEJAM O <S:FORM>
<%@ taglib uri="/struts-tags" prefix="s"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Empréstimo</title>
</head>
<body>
<h2>Empréstimos</h2>
<a href="index.jsp">Cadastro de Cliente</a>
<a href="cadFilme.jsp">Cadastro de Filme</a>
<a href="emprestimo!listarTodos.action">Emprestimo</a>
<hr />
<s:form action="emprestimo!inserirEmprestimo" method="get" theme="ajax">
<!--<s:textfield name="emprestimo.id" label="Id Emp:" />-->
<s:select list="clientes" label="Clientes:" listValue="nome"
listKey="id" name="emprestimo.cliente.id" />
<s:select list="filmes" label="Filmes:" listValue="nome" listKey="id"
name="emprestimo.filme.id" />
<s:datetimepicker name="emprestimo.data" displayFormat="dd/MM/yyyy"
label="Data:" theme="ajax"/>
<s:textfield name="emprestimo.valor" label="Valor:" />
<s:submit value="Gravar"/>
</s:form>
</body>
</html>