Olá
Estou tentando criar um projeto para testar a integração do wicket+spring+hibernate+jpa usando annotations, onde eu tento inicializar a entidade relativa ao formulário no wicket via anotação @SpringBean. Fiz esta opção para deixar a implementação da entidade oculta, tornando publica apenas sua interface.
O arquivo VehiclePage:
[code]
public class VehiclePage extends WebPage{
private Form<Vehicle> form;
@SpringBean
private Vehicle vehicle;
@SpringBean
private VehicleService vehicleService;
public VehiclePage() {
FeedbackPanel feeedback = new FeedbackPanel("feeedback");
add(feeedback);
form = new Form("vehicleForm");
form.setModel(new CompoundPropertyModel(vehicle));
form.add(new TextField("placa"));
form.add(new Button("saveButton") {
@Override
public void onSubmit() {
vehicleService.persist(vehicle);
}
});
add(form);
}
}[/code]
Acontece que quando eu tento persistir a entidade no banco é lançada a exceção:
java.lang.IllegalArgumentException: Unknown entity: org.apache.wicket.proxy.$Proxy21
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:223)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.lang.reflect.Method.invoke(Method.java:597)
Debugando o código, eu percebi que em tempo de execução o objeto recebido pelo método persist é um org.apache.wicket.proxy.LazyInitProxyFactory$JdkHandler@802ed1, com uma propriedade target apontando para a endidade que estou querendo persistir (VehicleImpl, com todos os campos preenchidos corretamente). Já testei instanciando manualmente a entidade no arquivo VehiclePage e tudo funcionou corretamente.
Essa abordagem de inicializar a entidade usando @SpringBean está correta, ou é melhor implementar um método VehicleService.createVehicle() para retornar uma instância da minha entidade?