Collectives™ on Stack Overflow
Find centralized, trusted content and collaborate around the technologies you use most.
Learn more about Collectives
Teams
Q&A for work
Connect and share knowledge within a single location that is structured and easy to search.
Learn more about Teams
I am new to springboot, and I am trying to write a login method which will login user based on emailid and password or phone number and password.
In my service I have written something like this
public interface AuthService extends CrudRepository<AuthenticationModel, String> {
Iterable<AuthenticationModel> findUserByEmailId(String emailId, String password);
Iterable<AuthenticationModel> findUserByPhoneNumber(Long phoneNumber, String password);
I know methods like findUserByEmailId and findUserByPhoneNumber are not written in CrudRepository interface. That's why I am getting this error.
Caused by: java.lang.IllegalArgumentException: Failed to create query for method public abstract java.lang.Iterable com.xyz.services.authenticate.AuthService.findUserByPhoneNumber(java.lang.Long,java.lang.String)! No property phoneNumber found for type AuthenticationModel!
at org.springframework.data.jpa.repository.query.PartTreeJpaQuery.<init>(PartTreeJpaQuery.java:96)
What my concern is how can I implement my custom query in springboot ? I am aware of JPQL and native SQL implementations. But Is this recommended way of doing this ?
Say In future I am supposed to implement the search functionality, now search mechanism is itself a huge implementation. Can I implement the JPQL or native SQL implementation in search mechanism ? Or Is there another way which springboot provides which I am not aware of ?
I know there are lot of questions in one post. But I am confused when I tried to drill down to the actual answer on internet.
EDIT:
AuthenticationModel.class
public class AuthenticationModel {
@GeneratedValue(strategy = GenerationType.AUTO)
@NotNull
@NotBlank
@Column(name = "user_uuid", unique = true)
private UUID userUuid;
@NotNull
@NotBlank
@Email
@Column(name = "user_email_id", unique = true)
private String userEmailId;
@NotNull
@NotBlank
@Positive
@Size(min = 10, max = 10)
@Column(name = "user_phone_number", unique = true)
private Long userPhoneNumber;
@NotNull
@Column(name = "user_password")
private String userPassword;
–
–
–
Spring data JPA derived query from the method name. You should use exact field name and parameter also for JPA method naming query. Here use UserEmailId, UserPhoneNumber and UserPassword in method name
List<AuthenticationModel> findByUserEmailIdAndUserPassword(String emailId, String password);
List<AuthenticationModel> findByUserPhoneNumberAndUserPassword(Long phoneNumber, String password);
Here you can read details about JPA method naming query https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods
–
–
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.