diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/CustomRepositoryApplication.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/CustomRepositoryApplication.java new file mode 100644 index 0000000000..f8f42aa67c --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/CustomRepositoryApplication.java @@ -0,0 +1,12 @@ +package com.baeldung.spring.data.persistence.customrepository; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication +public class CustomRepositoryApplication { + + public static void main(String[] args) { + SpringApplication.run(CustomRepositoryApplication.class, args); + } +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/model/User.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/model/User.java new file mode 100644 index 0000000000..ba217577f3 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/model/User.java @@ -0,0 +1,55 @@ +package com.baeldung.spring.data.persistence.customrepository.model; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; +import java.util.Objects; + +@Entity +public class User { + + @Id + @GeneratedValue + private Long id; + private String name; + private String email; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEmail() { + return email; + } + + public void setEmail(String email) { + this.email = email; + } + + @Override + public boolean equals(Object o) { + if (this == o) + return true; + if (o == null || getClass() != o.getClass()) + return false; + User user = (User) o; + return Objects.equals(id, user.id) && Objects.equals(name, user.name) && Objects.equals(email, user.email); + } + + @Override + public int hashCode() { + return Objects.hash(id, name, email); + } +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepository.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepository.java new file mode 100644 index 0000000000..2c79e518b6 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepository.java @@ -0,0 +1,9 @@ +package com.baeldung.spring.data.persistence.customrepository.repository; + +import com.baeldung.spring.data.persistence.customrepository.model.User; + +public interface CustomUserRepository { + + User customFindMethod(Long id); + +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepositoryImpl.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepositoryImpl.java new file mode 100644 index 0000000000..dc006580c1 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/CustomUserRepositoryImpl.java @@ -0,0 +1,26 @@ +package com.baeldung.spring.data.persistence.customrepository.repository; + +import com.baeldung.spring.data.persistence.customrepository.model.User; + +import javax.annotation.PostConstruct; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import java.util.Objects; + +public class CustomUserRepositoryImpl implements CustomUserRepository { + + @PersistenceContext + private EntityManager entityManager; + + @Override + public User customFindMethod(Long id) { + return (User) entityManager.createQuery("FROM User u WHERE u.id = :id") + .setParameter("id", id) + .getSingleResult(); + } + + @PostConstruct + public void postConstruct() { + Objects.requireNonNull(entityManager); + } +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/UserRepository.java b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/UserRepository.java new file mode 100644 index 0000000000..d9f60015cc --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/main/java/com/baeldung/spring/data/persistence/customrepository/repository/UserRepository.java @@ -0,0 +1,10 @@ +package com.baeldung.spring.data.persistence.customrepository.repository; + +import com.baeldung.spring.data.persistence.customrepository.model.User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface UserRepository extends JpaRepository, CustomUserRepository { + +} diff --git a/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/customrepository/CustomRepositoryUnitTest.java b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/customrepository/CustomRepositoryUnitTest.java new file mode 100644 index 0000000000..ed54225a14 --- /dev/null +++ b/persistence-modules/spring-data-jpa-repo-2/src/test/java/com/baeldung/spring/data/persistence/customrepository/CustomRepositoryUnitTest.java @@ -0,0 +1,27 @@ +package com.baeldung.spring.data.persistence.customrepository; + +import com.baeldung.spring.data.persistence.customrepository.model.User; +import com.baeldung.spring.data.persistence.customrepository.repository.UserRepository; +import org.junit.jupiter.api.Test; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.test.context.SpringBootTest; + +import static org.junit.jupiter.api.Assertions.assertEquals; + +@SpringBootTest(classes = CustomRepositoryApplication.class) +class CustomRepositoryUnitTest { + + @Autowired + private UserRepository userRepository; + + @Test + void givenCustomRepository_whenInvokeCustomFindMethod_thenEntityIsFound() { + User user = new User(); + user.setEmail("foo@gmail.com"); + user.setName("userName"); + + User persistedUser = userRepository.save(user); + + assertEquals(persistedUser, userRepository.customFindMethod(user.getId())); + } +}