Ir ao conteúdo
  • Cadastre-se

Lucas Da Silva Rezende

Membro Júnior
  • Posts

    9
  • Cadastrado em

  • Última visita

Tudo que Lucas Da Silva Rezende postou

  1. Boa noite galera, Seguinte estou montando uma api rest e estou retornando uma lista de cidades que trago do banco. Vou mostrar a estrutura das classes e como ocorre o problema. Cidade possui um mapeamento ManyToOne de Estado que por sua vez possui um mapeamento OneToMany de cidades. Quando eu faço a busca das cidades é trago a lista normalmente só que quando eu chamo o método gson.toJson(cidades) ocorre a exceção LazyInitializationException, mas ocorre na classe CollectionTypeAdapterFactory (código abaixo), coloquei o seguinte comentário na linha que dá o problema "Aqui que ocorre a exceção porque ele tenta acessar a lista de cidades dentro de estado.". public final class CollectionTypeAdapterFactory implements TypeAdapterFactory { private final ConstructorConstructor constructorConstructor; public CollectionTypeAdapterFactory(ConstructorConstructor constructorConstructor) { this.constructorConstructor = constructorConstructor; } @Override public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> typeToken) { Type type = typeToken.getType(); Class<? super T> rawType = typeToken.getRawType(); if (!Collection.class.isAssignableFrom(rawType)) { return null; } Type elementType = $Gson$Types.getCollectionElementType(type, rawType); TypeAdapter<?> elementTypeAdapter = gson.getAdapter(TypeToken.get(elementType)); ObjectConstructor<T> constructor = constructorConstructor.get(typeToken); @SuppressWarnings({"unchecked", "rawtypes"}) // create() doesn't define a type parameter TypeAdapter<T> result = new Adapter(gson, elementType, elementTypeAdapter, constructor); return result; } private static final class Adapter<E> extends TypeAdapter<Collection<E>> { private final TypeAdapter<E> elementTypeAdapter; private final ObjectConstructor<? extends Collection<E>> constructor; public Adapter(Gson context, Type elementType, TypeAdapter<E> elementTypeAdapter, ObjectConstructor<? extends Collection<E>> constructor) { this.elementTypeAdapter = new TypeAdapterRuntimeTypeWrapper<E>(context, elementTypeAdapter, elementType); this.constructor = constructor; } @Override public Collection<E> read(JsonReader in) throws IOException { if (in.peek() == JsonToken.NULL) { in.nextNull(); return null; } Collection<E> collection = constructor.construct(); in.beginArray(); while (in.hasNext()) { E instance = elementTypeAdapter.read(in); collection.add(instance); } in.endArray(); return collection; } @Override public void write(JsonWriter out, Collection<E> collection) throws IOException { if (collection == null) { out.nullValue(); return; } out.beginArray(); // Aqui que ocorre a exceção porque ele tenta acessar a lista de cidades dentro de estado. for (E element : collection) { elementTypeAdapter.write(out, element); } out.endArray(); } } } Pesquisando sobre eu achei o seguinte tópico no stackoverflow https://stackoverflow.com/questions/13459718/could-not-serialize-object-cause-of-hibernateproxy. Criei o TypeAdapter para o HibernateProxy só que não funcionou. Coloquei um comentário no código abaixo explicando o que acontece pesquise por "ERRO: " que via direto para ele. public class JsonHibernateProxyTypeAdapter extends TypeAdapter<HibernateProxy> { public static final TypeAdapterFactory FACTORY = new TypeAdapterFactory() { @Override @SuppressWarnings("unchecked") public <T> TypeAdapter<T> create(Gson gson, TypeToken<T> type) { return (HibernateProxy.class.isAssignableFrom(type.getRawType()) ? (TypeAdapter<T>) new JsonHibernateProxyTypeAdapter(gson) : null); } }; private final Gson context; private JsonHibernateProxyTypeAdapter(Gson context) { this.context = context; } @Override public HibernateProxy read(JsonReader in) throws IOException { throw new UnsupportedOperationException("Not supported"); } @SuppressWarnings({"rawtypes", "unchecked"}) @Override public void write(JsonWriter out, HibernateProxy value) throws IOException { if(!Hibernate.isInitialized(value)) { // ERRO: Ele entra aqui quando chega a lista de cidades e atribui ela para null só que só no json, porque ele ainda // passa pela CollectionTypeAdapterFactory e dá o problema mesmo assim. out.nullValue(); return; } if (value == null) { out.nullValue(); return; } // Retrieve the original (not proxy) class Class<?> baseType = Hibernate.getClass(value); // Get the TypeAdapter of the original class, to delegate the serialization TypeAdapter delegate = context.getAdapter(TypeToken.get(baseType)); // Get a filled instance of the original class Object unproxiedValue = (value).getHibernateLazyInitializer() .getImplementation(); // Serialize the value delegate.write(out, unproxiedValue); } } Então a questão é o seguinte, como farei para essa bagaça funcionar??? kk porque não achei em nenhum lugar um problema assim e tudo que encontro remete à esta mesma solução do código acima, só que não funciona, aí estou sem saber o que fazer.
  2. Gostaria de saber como faço para conectar com o c à um banco SQL Server? Achei algo sobre ODBC que parece ser algum conector, mas não entendi muito bem como funciona e como fazer a conexão ao banco. Espero que alguém me ajude. Sei que tem o mysql que é mais de boa pra isso, mas minha faculdade usa o SQL Server pra nos ensinar, então qualquer server diferente não vai adiantar muito, preciso é saber como faz no SQL Server, espero que me ajudem. Obrigado!
  3. Olá! Estou fazendo um programa que mostre o contrário de um número inserido pelo usuário. Porém estou com dificuldade quanto aos números que comecem com mais de um zero como por exemplo: 0001 que deve retornar 1000. Eu consegui resolver somente para o 01, mas quando contem mais zeros eu não consigo o resultado. Para medir o tamanho do número digitado eu uso a seguinte função: int intlen(int num){ int count=0, countz = 0; while(num != 0){ count += 1; num /= 10; if(num == 0) countz+=1; //descobrir a quantidade do zeros } return count + countz; } O if é onde eu consigo descobrir o zero, porém ele não vai funcionar obviamente devido a falta de um laço que é o que deveria funcionar, porém ocorre o oposto e o programa fica em looping. Então se alguém conseguir me ajudar nisso, agradeço muito.
  4. Mas o void ele armazena qualquer valor? Se sim, as operações são feitas da mesma maneira?
  5. Olá pessoal! Seguinte, estou fazendo algumas funções padrões que uso para estudar mesmo e me surgiu a ideia de fazer uma função que de alguma forma, não faço a mínima ideia de como kkk, possa receber todos os tipos como parâmetro em um só. Por exemplo uma função de inserção de uma informação em uma lista, Lista* insere(Lista* li, <info>) essa info se eu quisesse que seja outros tipos até onde eu sei teria que criar uma para cada tipo (int, float, double, etc), só que queria uma só que aceitassem todos. Acham que teriam essa possibilidade? Se sim como vocês acham que poderia ser feito?
  6. Veja o que está de errado porque está entrando num loop infinito. void consultarDados(char *chave, LISTA *pCons){ int i; for(i=0; i<sizeof(LISTA); i++){ if(strcmp(chave, pCons->ps[i].nome)){ printf("Logradouro: %s", pCons->ps[i].logr); printf("Número da casa: %d", pCons->ps[i].numCasa); printf("CEP: %s", pCons->ps[i].CEP); printf("Bairro: %s", pCons->ps[i].bairro); printf("Cidade: %s", pCons->ps[i].city); printf("Telefone: %s", pCons->ps[i].fone); printf("Nome do Pai: %s", pCons->ps[i].pai); printf("Nome da Mãe: %s", pCons->ps[i].mae); } } } adicionado 3 minutos depois Será que não seria por causa desse sizeof? Porque eu coloquei para pegar o tamanho da struct LISTA.
  7. Estou fazendo um exercício aqui que pede para montar uma lista com os dados de uma pessoa e que permita a consulta de seus dados pelo nome da pessoa. Eu consegui fazer para mostrar os dados presentes na lista somente, agora fazer uma pesquisa não estou conseguindo. Se alguém puder me explicar como faz eu agradeço muito.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...