Skip to content

Instantly share code, notes, and snippets.

View yannbriancon's full-sized avatar

Yann Briançon yannbriancon

View GitHub Profile
@yannbriancon
yannbriancon / NPlusOneQueryLoggingTest.java
Last active May 8, 2020 14:44
Test triggering N+1 query
@RunWith(MockitoJUnitRunner.class)
@SpringBootTest
@Transactional
class NPlusOneQueriesLoggingTest {
@Autowired
private MessageRepository messageRepository;
@Test
void nPlusOneQueriesDetection_isLoggingWhenDetectingNPlusOneQueries() {
@yannbriancon
yannbriancon / NPlusOneQueryLoggingTest.java
Last active May 8, 2020 14:43
Test changing interceptor configuration to ERROR
@RunWith(SpringRunner.class)
@SpringBootTest("hibernate.query.interceptor.error-level=ERROR")
@Transactional
class NPlusOneQueriesLoggingTest {
...
}
@yannbriancon
yannbriancon / MessageRepository.java
Created May 2, 2020 17:46
JPA query with entity graph
@EntityGraph(attributePaths = {"author"})
List<Message> getAllBy();
@yannbriancon
yannbriancon / MessageRepository.java
Created May 2, 2020 17:47
JPQL with JOIN FETCH
@Query("SELECT *
FROM Message m
LEFT JOIN FETCH m.author")
List<Message> getAllBy();
@yannbriancon
yannbriancon / MessageRepository.java
Last active May 2, 2020 17:53
Criteria query with JoinType LEFT
List<Message> getAllBy() {
CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
CriteriaQuery<Message> query = criteriaBuilder.createQuery(Message.class);
Root<Message> message = query.from(Message.class);
// Add fetching of the author field
message.fetch(Message_.author, JoinType.LEFT);
query.select(message);
TypedQuery<Message> typedQuery = entityManager.createQuery(query);
@yannbriancon
yannbriancon / UserRepository.java
Last active May 5, 2020 07:04
Eager Fetching With Result Limiting
@Repository
public interface UserRepository extends JpaRepository<User, Long> {
@EntityGraph(attributePaths = {"messages"})
List<User> findTop5By();
// JPQL does not support LIMIT
// We need to use Pageable to set the number of ids we want
@Query("SELECT id " +
"FROM User ")
List<Long> findIds(Pageable pageable);