Para reimplementar a classe controller, devemos declarar uma classe que herde de br.com.jbc.controller.Controller, sendo necessário especificar o tipo de classe de manipulação.
Vejamos como utilizar diretamente a classe Controller para inserir um registro de Venda:
br.com.jbc.controller.Controller<Venda> controller =
new br.com.jbc.controller.Controller<Venda>();
try {
Venda venda = new Venda();
venda.setValor(50.00");
venda.setProduto(new Produto(1));
venda.setQuantidade(10);
controller.insert(venda);
} catch (Exception e) {
e.printStackTrace();
}
Convenhamos que para algumas operações precisamos efetuar algumas atualizações em outras entidades, porém isto deve ser feito na mesma transação, então declaramos a classe para que seja possível reimplementar o método inserir Venda, pois precisamos atualizar o estoque do Produto 1:
public class VendaController extends br.com.jbc.controller.Controller<Venda>{
@Override
public Boolean insert(Venda venda){
long estoqueProduto = venda.getProduto().getQuantidade();
// atualiza o estoque com a quantidade vendida
venda.getProduto().setQuantidade(estoqueProduto - venda.getQuantidade());
super.insert(venda);
}
}
Invocamos super.insert(venda) para chamar o método da classe pai, neste caso a classe br.com.jbc.controller.Controller
Para este exemplo, consideramos que o produto esteja delcarado na classe Venda com uma anotação org.hibernate.annotations.CascadeType.ALL
Em seguida, utilizamos a classe criada:
VendaController vendaController = new VendaController();
try {
Venda vendaController = new Venda();
venda.setValor(50.00");
venda.setProduto(new Produto(1));
venda.setQuantidade(10);
vendaController.insert(venda);
} catch (Exception e) {
e.printStackTrace();
}
Dando atenção a declaração da classe VendaController e a insersão da Venda, códigos que se encontram destacados e em negrito.
Com a sobrescrita do método insert, foi possível fazer a atualização do estoque do produto vendido.