Solucionado (ver solução)
Solucionado
(ver solução)
3
respostas

OpenEntityManagerInViewFilter

Bom dia, estou com um probleminha ao utilizar o Spring Boot, estou fazendo o projeto da casa do código, porém estou tendo problema na lista de preços, pois pelo que eu li, por padrão o spring boot já vem configurado o Open Entity Manager In View, mais no meu caso não funciona, também utilizei no meu arquivo de properties:

spring.jpa.open-in-view = true

porém continuo com o mesmo problema, segue o meu código da classe Produto:

@ElementCollection
private List<Preco> precos;

para que não ocorra isso, tenho que colocar o fetch type como EAGER, gostaria de saber se possui algo na configuração do Spring boot a mais que tenho que fazer para que funcione sem o fetch type?

3 respostas

Opa, engraçado, não precisa de nada a mais. Aí precisamos da stacktrace para dar uma investigada, tem algo estranho mesmo.

Oi Alberto, segue em anexo o erro do console:

org.hibernate.LazyInitializationException: failed to lazily initialize a collection of role: br.com.casadocodigo.models.Produto.precos, could not initialize proxy - no Session
    at org.hibernate.collection.internal.AbstractPersistentCollection.throwLazyInitializationException(AbstractPersistentCollection.java:582) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.collection.internal.AbstractPersistentCollection.withTemporarySessionIfNeeded(AbstractPersistentCollection.java:201) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.collection.internal.AbstractPersistentCollection.initialize(AbstractPersistentCollection.java:561) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.collection.internal.AbstractPersistentCollection.read(AbstractPersistentCollection.java:132) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at org.hibernate.collection.internal.PersistentBag.iterator(PersistentBag.java:277) ~[hibernate-core-5.2.17.Final.jar:5.2.17.Final]
    at java.util.Spliterators$IteratorSpliterator.estimateSize(Unknown Source) ~[na:1.8.0_171]
    at java.util.Spliterator.getExactSizeIfKnown(Unknown Source) ~[na:1.8.0_171]
    at java.util.stream.AbstractPipeline.copyIntoWithCancel(Unknown Source) ~[na:1.8.0_171]
    at java.util.stream.AbstractPipeline.copyInto(Unknown Source) ~[na:1.8.0_171]
    at java.util.stream.AbstractPipeline.wrapAndCopyInto(Unknown Source) ~[na:1.8.0_171]
    at java.util.stream.FindOps$FindOp.evaluateSequential(Unknown Source) ~[na:1.8.0_171]
    at java.util.stream.AbstractPipeline.evaluate(Unknown Source) ~[na:1.8.0_171]
    at java.util.stream.ReferencePipeline.findFirst(Unknown Source) ~[na:1.8.0_171]
    at br.com.casadocodigo.models.Produto.precoPara(Produto.java:35) ~[classes/:na]
    at br.com.casadocodigo.models.CarrinhoItem.getPreco(CarrinhoItem.java:16) ~[classes/:na]
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_171]
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_171]
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) ~[na:1.8.0_171]
    at java.lang.reflect.Method.invoke(Unknown Source) ~[na:1.8.0_171]

Engraçado é que quando vai para a página de detalhes do livros, os preços aparecem, mas quando clico em comprar e vai pro carrinho, o preço não aparece e da esse erro que coloquei.

solução!

É... para isso acontecer esse trecho de código tem que estar rodando numa thread diferente da que você carregou o objeto... um contexto assíncrono talvez... olhando só a stacktrace, esse seria o meu chute.