Reputation: 153
I would like to know if there is any way to use a parameter from a function I pass to a repository can be used in the @Query.
I would like to sort users by gaming platform so I added the following function to my UserRepository:
@Repository
public interface UserRepository extends CrudRepository<DbUser, Integer> {
@Query("SELECT * from users WHERE platform = *****parameter here***** ")
public List<DbUser> findAllByPlatform(String platform);
}
Does anybody know if this is possible? If so, how? If not, is there a clean workaround? Thanks in advance.
EDIT: My DbUser class:
@Entity
@Table(name = "users")
public class DbUser {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name="user_id")
private int UserId;
@Column(name="user_name")
private String UserName;
@Column(name="email_address")
private String EmailAddress;
@Column(name="password_hash")
private int PasswordHash;
@Column(name="platform")
private String Platform;
@Column(name="platformid")
private String PlatformID;
@Convert(converter = StringListConvertor.class)
private ArrayList<String> Wishlist;
public DbUser(String userName, String emailAddress, int passwordHash, String platform, String platformID, String newWishlistItem){
UserName = userName;
EmailAddress = emailAddress;
PasswordHash = passwordHash;
Platform = platform;
PlatformID = platformID;
Wishlist.add(newWishlistItem);
}
public DbUser() {
}
public int getUserId() {
return UserId;
}
public void setUserId(int userId) {
UserId = userId;
}
public String getUserName() {
return UserName;
}
public void setUserName(String userName) {
UserName = userName;
}
public String getEmailAddress() {
return EmailAddress;
}
public void setEmailAddress(String emailAddress) {
EmailAddress = emailAddress;
}
public int getPasswordHash() {
return PasswordHash;
}
public void setPasswordHash(int passwordHash) {
PasswordHash = passwordHash;
}
public String getPlatform() {
return Platform;
}
public void setPlatform(String platform) {
Platform = platform;
}
public String getPlatformID() {
return PlatformID;
}
public void setPlatformID(String platformID) {
PlatformID = platformID;
}
public ArrayList<String> getWishlist() {
return Wishlist;
}
public void setWishlist(ArrayList<String> wishlist) {
Wishlist = wishlist;
}
}
Upvotes: 1
Views: 669
Reputation: 4462
If you're using Spring data, annotate parameter with @Param and supply variable name to be used in query:
@Query("SELECT * from users WHERE platform = :pltfrm")
public List<DbUser> findAllByPlatform(@Param("pltfrm") String platform);
Upvotes: 1
Reputation: 944
You can do something like that
@Query("SELECT * from users WHERE platform = %?1")
Upvotes: 0