Hey Folks! How are you all doing?
I found a problem and a temporary solution in my project. But now, I need
to definetly solve the problem. I am noob here. But I intend to contribute
a lot in this group.
Let's go to my question: I have a Spring Boot project that contains two
classes with a ManyToMany relationship. The entities are Book and Author.
I created three profiles in it: test, dev and prod. All configurations for
H2 Database are in the application-test.properties file:
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=create
And, in the application.properties file, I did this way:
spring.profiles.active=${APP_PROFILE:test}
spring.jpa.open-in-view=false
It worked for several endpoints but when I do GET to retrieve all books by
the author's name, I get a 500 status code, and in my IDE (IntelliJ) I have
this:
Hibernate:
select
distinct book0_.id as id1_1_,
book0_.book_genre as book_gen2_1_,
book0_.isbn as isbn3_1_,
book0_.language as language4_1_,
book0_.print_length as print_le5_1_,
book0_.publication_year as publicat6_1_,
book0_.publisher as publishe7_1_,
book0_.synopsis as synopsis8_1_,
book0_.title as title9_1_,
book0_.url_cover as url_cov10_1_
from
tb_book book0_
inner join
tb_book_author authors1_
on book0_.id=authors1_.book_id
inner join
tb_author author2_
on authors1_.author_id=author2_.id
where
author2_.name like ? limit ?
2021-07-02 17:54:07.806 WARN 16158 --- [nio-8080-exec-6]
.w.s.m.s.DefaultHandlerExceptionResolver : Resolved
[org.springframework.http.converter.HttpMessageNotWritableException: Could
not write JSON: failed to lazily initialize a collection of role:
com.bruno.project.entities.Book.authors, could not initialize proxy - no
Session; nested exception is
com.fasterxml.jackson.databind.JsonMappingException: failed to lazily
initialize a collection of role: com.bruno.project.entities.Book.authors,
could not initialize proxy - no Session (through reference chain:
org.springframework.data.domain.PageImpl["content"]->java.util.Collections$UnmodifiableRandomAccessList[0]->com.bruno.project.entities.Book["authors"])]
The temporary solution I found was changing the content of the
application.properties file, this way:
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
spring.datasource.url=jdbc:h2:mem:testdb
spring.datasource.username=sa
spring.datasource.password=
spring.datasource.driver-class-name=org.h2.Driver
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.format_sql=true
spring.jpa.hibernate.ddl-auto=create
That way, all endpoints run perfectly. But I will deploy my code into
Heroku platform and it would be very good if I could user different
profiles.
Have you ever experienced this situation? May you help me?
Thanks in advance!
Bruno
--
You received this message because you are subscribed to the Google Groups "H2
Database" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/h2-database/e8283b5c-e57e-4ae2-9b87-73baab30afd9n%40googlegroups.com.