Pim_vh
Pim_vh

Reputation: 153

CrudRepository query with parameter

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

Answers (2)

Alexandra Dudkina
Alexandra Dudkina

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

Hatice
Hatice

Reputation: 944

You can do something like that

@Query("SELECT * from users WHERE platform = %?1")

spring data jpa documentation

Upvotes: 0

Related Questions