packagebr.com.repository.helper.usuario;importjava.util.ArrayList;importjava.util.List;importjava.util.Optional;importjavax.persistence.EntityManager;importjavax.persistence.PersistenceContext;importorg.hibernate.Criteria;importorg.hibernate.Hibernate;importorg.hibernate.Session;importorg.hibernate.criterion.Criterion;importorg.hibernate.criterion.DetachedCriteria;importorg.hibernate.criterion.MatchMode;importorg.hibernate.criterion.Projections;importorg.hibernate.criterion.Restrictions;importorg.hibernate.criterion.Subqueries;importorg.hibernate.sql.JoinType;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.data.domain.Page;importorg.springframework.data.domain.PageImpl;importorg.springframework.data.domain.Pageable;importorg.springframework.transaction.annotation.Transactional;importorg.springframework.util.StringUtils;importbr.com.webadminimob.model.Grupo;importbr.com.webadminimob.model.Usuario;importbr.com.webadminimob.model.UsuarioGrupo;importbr.com.webadminimob.repository.filter.UsuarioFilter;importbr.com.webadminimob.repository.paginacao.PaginacaoUtil;publicclassUsuariosImplimplementsUsuariosQueries{@PersistenceContextprivateEntityManagermanager;@AutowiredprivatePaginacaoUtilpaginacaoUtil;@OverridepublicOptional<Usuario>porEmailEAtivo(Stringemail){returnmanager.createQuery("from Usuario where lower(email) = lower(:email) and ativo = true",Usuario.class).setParameter("email",email).getResultList().stream().findFirst();}@OverridepublicList<String>permissoes(Usuariousuario){returnmanager.createQuery("select distinct p.nome from Usuario u inner join u.grupos g inner join g.permissoes p where u = :usuario",String.class).setParameter("usuario",usuario).getResultList();}@SuppressWarnings("unchecked")@Transactional(readOnly=true)@OverridepublicPage<Usuario>filtrar(UsuarioFilterfiltro,Pageablepageable){Criteriacriteria=manager.unwrap(Session.class).createCriteria(Usuario.class);paginacaoUtil.preparar(criteria,pageable);adicionarFiltro(filtro,criteria);List<Usuario>filtrados=criteria.list();filtrados.forEach(u->Hibernate.initialize(u.getGrupos()));returnnewPageImpl<>(filtrados,pageable,total(filtro));}@Transactional(readOnly=true)@OverridepublicUsuariobuscarComGrupos(Longcodigo){Criteriacriteria=manager.unwrap(Session.class).createCriteria(Usuario.class);criteria.createAlias("grupos","g",JoinType.LEFT_OUTER_JOIN);criteria.add(Restrictions.eq("codigo",codigo));criteria.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);return(Usuario)criteria.uniqueResult();}privateLongtotal(UsuarioFilterfiltro){Criteriacriteria=manager.unwrap(Session.class).createCriteria(Usuario.class);adicionarFiltro(filtro,criteria);criteria.setProjection(Projections.rowCount());return(Long)criteria.uniqueResult();}privatevoidadicionarFiltro(UsuarioFilterfiltro,Criteriacriteria){if(filtro!=null){if(!StringUtils.isEmpty(filtro.getNome())){criteria.add(Restrictions.ilike("nome",filtro.getNome(),MatchMode.ANYWHERE));}if(!StringUtils.isEmpty(filtro.getEmail())){criteria.add(Restrictions.ilike("email",filtro.getEmail(),MatchMode.START));}if(filtro.getGrupos()!=null&&!filtro.getGrupos().isEmpty()){List<Criterion>subqueries=newArrayList<>();for(LongcodigoGrupo:filtro.getGrupos().stream().mapToLong(Grupo::getCodigo).toArray()){DetachedCriteriadc=DetachedCriteria.forClass(UsuarioGrupo.class);dc.add(Restrictions.eq("id.grupo.codigo",codigoGrupo));dc.setProjection(Projections.property("id.usuario"));subqueries.add(Subqueries.propertyIn("codigo",dc));}Criterion[]criterions=newCriterion[subqueries.size()];criteria.add(Restrictions.and(subqueries.toArray(criterions)));}}}}
Acho que está injetando o objeto errado. A classe UsuariosImpl.java está implementado a interface UsuariosQueries.java. Não tem nenhum desses objetos sendo usados como dependências. Como está a definição da classe Usuario.java?
S
silviogs
Usuario.java
importjava.io.Serializable;importjava.time.LocalDate;importjava.util.List;importjavax.persistence.Column;importjavax.persistence.Entity;importjavax.persistence.GeneratedValue;importjavax.persistence.GenerationType;importjavax.persistence.Id;importjavax.persistence.JoinColumn;importjavax.persistence.JoinTable;importjavax.persistence.ManyToMany;importjavax.persistence.PreUpdate;importjavax.persistence.Table;importjavax.persistence.Transient;importjavax.validation.constraints.Size;importorg.hibernate.annotations.DynamicUpdate;importorg.hibernate.validator.constraints.Email;importorg.hibernate.validator.constraints.NotBlank;importbr.com.webadminimob.validation.AtributoConfirmacao;@AtributoConfirmacao(atributo="senha",atributoConfirmacao="confirmacaoSenha",message="Confirmação da senha não confere")@Entity@Table(name="usuario")@DynamicUpdatepublicclassUsuarioimplementsSerializable,Comparable<Usuario>{privatestaticfinallongserialVersionUID=1L;@Id@GeneratedValue(strategy=GenerationType.IDENTITY)privateLongid;@NotBlank(message="Nome é obrigatório")privateStringnome;@NotBlank(message="E-mail é obrigatório")@Email(message="E-mail inválido")privateStringemail;privateStringsenha;@TransientprivateStringconfirmacaoSenha;privateBooleanativo;@Size(min=1,message="Selecione pelo menos um grupo")@ManyToMany@JoinTable(name="usuario_grupo",joinColumns=@JoinColumn(name="codigo_usuario"),inverseJoinColumns=@JoinColumn(name="codigo_grupo"))privateList<Grupo>grupos;@Column(name="data_nascimento")privateLocalDatedataNascimento;@PreUpdateprivatevoidpreUpdate(){this.confirmacaoSenha=senha;}publicLonggetId(){returnid;}publicvoidsetId(Longcodigo){this.id=id;}publicStringgetNome(){returnnome;}publicvoidsetNome(Stringnome){this.nome=nome;}publicStringgetEmail(){returnemail;}publicvoidsetEmail(Stringemail){this.email=email;}publicStringgetSenha(){returnsenha;}publicvoidsetSenha(Stringsenha){this.senha=senha;}publicBooleangetAtivo(){returnativo;}publicvoidsetAtivo(Booleanativo){this.ativo=ativo;}publicLocalDategetDataNascimento(){returndataNascimento;}publicvoidsetDataNascimento(LocalDatedataNascimento){this.dataNascimento=dataNascimento;}publicList<Grupo>getGrupos(){returngrupos;}publicvoidsetGrupos(List<Grupo>grupos){this.grupos=grupos;}publicStringgetConfirmacaoSenha(){returnconfirmacaoSenha;}publicvoidsetConfirmacaoSenha(StringconfirmacaoSenha){this.confirmacaoSenha=confirmacaoSenha;}publicbooleanisNovo(){returnid==null;}@OverridepublicinthashCode(){finalintprime=31;intresult=1;result=prime*result+((id==null)?0:id.hashCode());returnresult;}@Overridepublicbooleanequals(Objectobj){if(this==obj)returntrue;if(obj==null)returnfalse;if(getClass()!=obj.getClass())returnfalse;Usuarioother=(Usuario)obj;if(id==null){if(other.id!=null)returnfalse;}elseif(!id.equals(other.id))returnfalse;returntrue;}@OverridepublicintcompareTo(Usuarioo){// TODO Auto-generated method stubreturn0;}}
Pelo que estou entendendo, vc está usando javaee e está tentando injetar com o spring. Se não me engano, para usar esses 2 juntos tem uma configuração extra que precisa ser feita.
Não necessariamente, funciona sem anotação de boas, mas eh bom colocar (até mesmo para evitar warnings chatos da IDE).
Jonathan_Medeiros
Será? nunca consegui usar dessa forma
Imagino que poderia se a implementação dele tivesse alguma anotação como @Component por exemplo, nesse caso nenhuma das classes dele tem, como o Spring injetaria esse Bean sem tê-lo criado dentro do IoC container?
eu tenho um projeto antigo aqui, que uso jsf com spring, realmente tem uma configuracao para dar certo mesmo. Preciso olhar para lembrar pois nao mexo mais