Olá, estou usando o vraptor com jpa, e toda vez que eu insiro algum elemento e em seguida tento pesquisar (Na maioria das minhas classes) ele da erro quando eu faço uma busca. Eu imaginava que era a cache por isso eu fiz de tudo para ignora-la, no entanto não é. Aqui está o erro e o dao e o pesistence.xml
DAO:
Persistence.xml
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="default">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>br.com.jamalxvi.modelo.Estado</class>
<class>br.com.jamalxvi.modelo.Cidade</class>
<class>br.com.jamalxvi.modelo.Funcionario</class>
<class>br.com.jamalxvi.modelo.FotoPerfil</class>
<class>br.com.jamalxvi.modelo.Cliente</class>
<class>br.com.jamalxvi.modelo.TelefoneCliente</class>
<class>br.com.jamalxvi.modelo.Fornecedor</class>
<class>br.com.jamalxvi.modelo.Identificacao</class>
<class>br.com.jamalxvi.modelo.IdentificacaoVeiculo</class>
<class>br.com.jamalxvi.modelo.TelefoneFornecedor</class>
<class>br.com.jamalxvi.modelo.Solicitacoes</class>
<class>br.com.jamalxvi.modelo.ServicosFeitos</class>
<class>br.com.jamalxvi.modelo.ServicosExecutados</class>
<class>br.com.jamalxvi.modelo.Servicos</class>
<class>br.com.jamalxvi.modelo.PecasUsadas</class>
<class>br.com.jamalxvi.modelo.Pecas</class>
<class>br.com.jamalxvi.modelo.Orcamento</class>
<class>br.com.jamalxvi.modelo.Modelo</class>
<class>br.com.jamalxvi.modelo.Marca</class>
<class>br.com.jamalxvi.modelo.Fotos_Solicitacoes</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost/XXXXXX" />
<property name="javax.persistence.jdbc.user" value="XXXXXXXX" />
<property name="javax.persistence.jdbc.password" value="XXXXXXXX" />
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQL5InnoDBDialect" />
<property name="hibernate.hbm2ddl.auto" value="update"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="true"/>
<property name="hibernate.transaction.jta.platform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform" />
<property name="eclipselink.query-results-cache" value="false"/>
<property name="eclipselink.cache.shared.default" value="false"/>
<property name="eclipselink.cache.size.default" value="0"/>
<property name="eclipselink.cache.type.default" value="None"/>
</properties>
</persistence-unit>
</persistence>
DAO:
package br.com.jamalxvi.dao;
import java.util.Collection;
import java.util.List;
import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.persistence.EntityManager;
import javax.persistence.TypedQuery;
import org.hibernate.CacheMode;
import org.hibernate.annotations.QueryHints;
import br.com.jamalxvi.modelo.Cliente;
import br.com.jamalxvi.modelo.FotoPerfil;
import br.com.jamalxvi.modelo.Identificacao;
import br.com.jamalxvi.modelo.IdentificacaoVeiculo;
import br.com.jamalxvi.modelo.TelefoneCliente;
@RequestScoped
public class ClienteDAO {
private EntityManager manager;
public ClienteDAO()
{
this(null);
}
@Inject
public ClienteDAO(EntityManager manager){
this.manager = manager;
}
public void salvar(Cliente cliente, byte[] imagem_perfil, List<TelefoneCliente> telefones )
{
manager.getTransaction().begin();
cliente.setAtivo(true);
cliente.getIdentificacao().setCliente(cliente);
manager.persist(cliente);
for (TelefoneCliente telefone : telefones) {
telefone.setCliente(cliente);
telefone.setAtivo(true);
manager.persist(telefone);
}
if (imagem_perfil != null) {
FotoPerfil perfil = new FotoPerfil();
perfil.setAtivo(true);
perfil.setCliente(cliente);
perfil.setImg(imagem_perfil);
manager.persist(perfil);
}
manager.getTransaction().commit();
manager.refresh(cliente);
}
public int ultimo()
{
TypedQuery<Cliente> query = manager.createQuery("Select c from Cliente c order by "
+ "c.id DESC", Cliente.class).setHint(QueryHints.CACHE_MODE, CacheMode.IGNORE);
Cliente c = (Cliente)query.getResultList().get(0);
return c.getId();
}
public void atualizar(Cliente cliente, byte[] imagem_perfil, List<TelefoneCliente> telefones )
{
manager.getTransaction().begin();
cliente.setAtivo(true);
cliente.getIdentificacao().setCliente(cliente);
manager.merge(cliente);
for (TelefoneCliente telefone : telefones) {
telefone.setCliente(cliente);
telefone.setAtivo(true);
manager.merge(telefone);
}
if (imagem_perfil != null) {
FotoPerfil perfil = new FotoPerfil();
perfil.setAtivo(true);
perfil.setCliente(cliente);
perfil.setImg(imagem_perfil);
manager.merge(perfil);
}
manager.getTransaction().commit();
manager.refresh(cliente);
}
public Collection<Identificacao> idenficacoes()
{
TypedQuery<Identificacao> query = manager.createQuery("select i from Identificacao i ",
Identificacao.class).setHint(QueryHints.CACHE_MODE, CacheMode.IGNORE);
Collection<Identificacao> lista = query.getResultList();
return lista;
}
public Cliente pesquisar_id(int id)
{
TypedQuery<Cliente> query = manager.createQuery("Select c from Cliente c where c.id = :pId",
Cliente.class).setHint(QueryHints.CACHE_MODE, CacheMode.IGNORE);
query.setParameter("pId", id);
Cliente cliente = query.getResultList().get(0);
return cliente;
}
public void apagar_telefones(int id)
{
Cliente cliente = pesquisar_id(id);
List<TelefoneCliente> telefoneCliente = cliente.getTelefones();
manager.getTransaction().begin();
for (TelefoneCliente tel : telefoneCliente) {
tel.setAtivo(false);
manager.merge(tel);
}
manager.getTransaction().commit();
}
public Collection<Cliente> pesquisar_nome(String pesquisa)
{
if (pesquisa == null) {
pesquisa = "";
}
TypedQuery<Cliente> query = manager.createQuery("select c from Cliente c where c.ativo ="
+ " true and c.nome LIKE :pPesquisa", Cliente.class).setHint(QueryHints.CACHE_MODE, CacheMode.IGNORE);
query.setParameter("pPesquisa", "%"+pesquisa+"%");
Collection<Cliente> list = query.getResultList();
return list;
}
public Collection<Cliente> listar()
{
TypedQuery<Cliente> query = manager.createQuery("select c from Cliente"
+ " c where c.ativo = true", Cliente.class).setHint(QueryHints.CACHE_MODE, CacheMode.IGNORE);
Collection<Cliente> list = query.getResultList();
return list;
}
public void apagar_imagens(int id)
{
Cliente cliente = pesquisar_id(id);
List<FotoPerfil> fotos = cliente.getFotos();
manager.getTransaction().begin();
for (FotoPerfil foto : fotos) {
foto.setAtivo(false);
manager.merge(foto);
}
manager.getTransaction().commit();
}
public void apagar(int id)
{
manager.getTransaction().begin();
TypedQuery<Cliente> query = manager.createQuery("Select c from Cliente c where c.id = :pId",
Cliente.class).setHint(QueryHints.CACHE_MODE, CacheMode.IGNORE);
query.setParameter("pId", id);
Cliente cliente = query.getResultList().get(0);
cliente.setAtivo(false);
for (IdentificacaoVeiculo veiculo : cliente.getVeiculos()) {
veiculo.setAtivo(false);
}
manager.getTransaction().commit();
manager.refresh(cliente);
}
}
ERRO:
java.lang.IndexOutOfBoundsException: Index: 0, Size: 0
java.util.ArrayList.rangeCheck(Unknown Source)
java.util.ArrayList.get(Unknown Source)
br.com.jamalxvi.dao.ClienteDAO.pesquisar_id(ClienteDAO.java:98)
br.com.jamalxvi.dao.ClienteDAO$Proxy$_$$_WeldClientProxy.pesquisar_id(Unknown Source)
br.com.jamalxvi.controller.ClienteController.finalizado(ClienteController.java:248)
br.com.jamalxvi.controller.ClienteController$Proxy$_$$_WeldClientProxy.finalizado(Unknown Source)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:38)
net.vidageek.mirror.invoke.MethodHandlerByMethod.withArgs(MethodHandlerByMethod.java:54)
br.com.caelum.vraptor.observer.ExecuteMethod.execute(ExecuteMethod.java:87)
sun.reflect.GeneratedMethodAccessor73.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:78)
br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$_$$_WeldClientProxy.next(Unknown Source)
br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack.next(DefaultSimpleInterceptorStack.java:49)
br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack$Proxy$_$$_WeldClientProxy.next(Unknown Source)
br.com.jamalxvi.seguranca.NomeInterceptor.intercept(NomeInterceptor.java:30)
br.com.jamalxvi.seguranca.NomeInterceptor$Proxy$_$$_WeldClientProxy.intercept(Unknown Source)
sun.reflect.GeneratedMethodAccessor72.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:38)
net.vidageek.mirror.invoke.MethodHandlerByMethod.withArgs(MethodHandlerByMethod.java:54)
br.com.caelum.vraptor.interceptor.StepInvoker.invokeMethod(StepInvoker.java:49)
br.com.caelum.vraptor.interceptor.StepInvoker.tryToInvoke(StepInvoker.java:40)
br.com.caelum.vraptor.interceptor.StepInvoker$Proxy$_$$_WeldClientProxy.tryToInvoke(Unknown Source)
br.com.caelum.vraptor.interceptor.InterceptorExecutor.executeAround(InterceptorExecutor.java:75)
br.com.caelum.vraptor.interceptor.InterceptorExecutor$Proxy$_$$_WeldClientProxy.executeAround(Unknown Source)
br.com.caelum.vraptor.interceptor.AspectStyleInterceptorHandler.execute(AspectStyleInterceptorHandler.java:85)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)
br.com.caelum.vraptor.interceptor.FlashInterceptor.intercept(FlashInterceptor.java:98)
br.com.caelum.vraptor.interceptor.FlashInterceptor$Proxy$_$$_WeldClientProxy.intercept(Unknown Source)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:58)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)
br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$_$$_WeldClientProxy.next(Unknown Source)
br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack.next(DefaultSimpleInterceptorStack.java:49)
br.com.caelum.vraptor.interceptor.DefaultSimpleInterceptorStack$Proxy$_$$_WeldClientProxy.next(Unknown Source)
br.com.jamalxvi.seguranca.AutorizacaoInterceptor.intercept(AutorizacaoInterceptor.java:37)
br.com.jamalxvi.seguranca.AutorizacaoInterceptor$Proxy$_$$_WeldClientProxy.intercept(Unknown Source)
sun.reflect.GeneratedMethodAccessor69.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
net.vidageek.mirror.provider.java.PureJavaMethodReflectionProvider.invoke(PureJavaMethodReflectionProvider.java:38)
net.vidageek.mirror.invoke.MethodHandlerByMethod.withArgs(MethodHandlerByMethod.java:54)
br.com.caelum.vraptor.interceptor.StepInvoker.invokeMethod(StepInvoker.java:49)
br.com.caelum.vraptor.interceptor.StepInvoker.tryToInvoke(StepInvoker.java:40)
br.com.caelum.vraptor.interceptor.StepInvoker$Proxy$_$$_WeldClientProxy.tryToInvoke(Unknown Source)
br.com.caelum.vraptor.interceptor.InterceptorExecutor.executeAround(InterceptorExecutor.java:75)
br.com.caelum.vraptor.interceptor.InterceptorExecutor$Proxy$_$$_WeldClientProxy.executeAround(Unknown Source)
br.com.caelum.vraptor.interceptor.AspectStyleInterceptorHandler.execute(AspectStyleInterceptorHandler.java:85)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)
br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor.intercept(ExceptionHandlerInterceptor.java:75)
br.com.caelum.vraptor.interceptor.ExceptionHandlerInterceptor$Proxy$_$$_WeldClientProxy.intercept(Unknown Source)
br.com.caelum.vraptor.core.ToInstantiateInterceptorHandler.execute(ToInstantiateInterceptorHandler.java:58)
br.com.caelum.vraptor.core.DefaultInterceptorStack.next(DefaultInterceptorStack.java:83)
br.com.caelum.vraptor.core.DefaultInterceptorStack.start(DefaultInterceptorStack.java:93)
br.com.caelum.vraptor.core.DefaultInterceptorStack$Proxy$_$$_WeldClientProxy.start(Unknown Source)
br.com.caelum.vraptor.observer.RequestHandlerObserver.handle(RequestHandlerObserver.java:93)
sun.reflect.GeneratedMethodAccessor56.invoke(Unknown Source)
sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
java.lang.reflect.Method.invoke(Unknown Source)
org.jboss.weld.injection.MethodInjectionPoint.invokeOnInstanceWithSpecialValue(MethodInjectionPoint.java:93)
org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:266)
org.jboss.weld.event.ObserverMethodImpl.sendEvent(ObserverMethodImpl.java:253)
org.jboss.weld.event.ObserverMethodImpl.notify(ObserverMethodImpl.java:232)
org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:169)
org.jboss.weld.event.ObserverNotifier.notifyObserver(ObserverNotifier.java:165)
org.jboss.weld.event.ObserverNotifier.notifyObservers(ObserverNotifier.java:119)
org.jboss.weld.event.ObserverNotifier.fireEvent(ObserverNotifier.java:112)
org.jboss.weld.event.EventImpl.fire(EventImpl.java:83)
br.com.caelum.vraptor.VRaptor.doFilter(VRaptor.java:118)
Manager Producer:
package br.com.jamalxvi.infra;
import javax.enterprise.context.RequestScoped;
import javax.enterprise.inject.Disposes;
import javax.enterprise.inject.Produces;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
public class EntityManagerProducer{
private static EntityManagerFactory factory =
Persistence.createEntityManagerFactory("default");
@Produces @RequestScoped
public EntityManager getEntityManager(){
factory.getCache().evictAll();
EntityManager manager = factory.createEntityManager();
manager.clear();
return manager;
}
public void close(@Disposes EntityManager manager){
manager.close();
}
}
Modelo Cliente:
/*
* To change this license header, choose License Headers in Project Properties.
* To change this template file, choose Tools | Templates
* and open the template in the editor.
*/
package br.com.jamalxvi.modelo;
import java.io.Serializable;
import java.util.List;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.OneToOne;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import org.hibernate.validator.constraints.Email;
import org.hibernate.validator.constraints.NotBlank;
/**
*
* @author henrique
*/
@Entity
public class Cliente implements Serializable{
/**
*
*/
private static final long serialVersionUID = -7977657403778698755L;
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
@OneToOne(mappedBy="cliente", cascade=CascadeType.ALL )
private Identificacao identificacao;
@NotBlank @NotNull @Size(max=255)
private String nome;
private String rua;
private String num;
private String comp;
private String bai;
private String informacao;
private String cep;
private String cidade;
private String estado;
private boolean ativo;
@Email
private String email;
@OneToMany(mappedBy="cliente", cascade=CascadeType.ALL)
private List<TelefoneCliente> telefones;
@OneToMany(mappedBy="cliente", cascade=CascadeType.ALL)
private List<IdentificacaoVeiculo> veiculos;
@OneToMany(mappedBy="cliente", cascade=CascadeType.ALL)
private List<FotoPerfil> fotos;
@OneToMany(cascade=CascadeType.ALL)
private List<ServicosExecutados> autorizados;
public List<ServicosExecutados> getAutorizados() {
return autorizados;
}
public void setAutorizados(List<ServicosExecutados> autorizados) {
this.autorizados = autorizados;
}
public List<IdentificacaoVeiculo> getVeiculos() {
return veiculos;
}
public void setVeiculos(List<IdentificacaoVeiculo> veiculos) {
this.veiculos = veiculos;
}
public List<FotoPerfil> getFotos() {
return fotos;
}
public void setFotos(List<FotoPerfil> fotos) {
this.fotos = fotos;
}
public Identificacao getIdentificacao() {
return identificacao;
}
public void setIdentificacao(Identificacao identificacao) {
this.identificacao = identificacao;
}
public String getEstado() {
return estado;
}
public void setEstado(String estado) {
this.estado = estado;
}
public List<TelefoneCliente> getTelefones() {
return telefones;
}
public void setTelefones(List<TelefoneCliente> telefones) {
this.telefones = telefones;
}
public Cliente() {
}
public boolean isAtivo() {
return ativo;
}
public void setAtivo(boolean ativo) {
this.ativo = ativo;
}
public String getCidade() {
return cidade;
}
public void setCidade(String cidade) {
this.cidade = cidade;
}
public String getCep() {
return cep;
}
public void setCep(String cep) {
this.cep = cep;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getNome() {
return nome;
}
public void setNome(String nome) {
this.nome = nome;
}
public String getRua() {
return rua;
}
public void setRua(String rua) {
this.rua = rua;
}
public String getNum() {
return num;
}
public void setNum(String num) {
this.num = num;
}
public String getComp() {
return comp;
}
public void setComp(String comp) {
this.comp = comp;
}
public String getBai() {
return bai;
}
public void setBai(String bai) {
this.bai = bai;
}
public String getInformacao() {
return informacao;
}
public void setInformacao(String informacao) {
this.informacao = informacao;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
