有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何编写一个自定义的crudepository方法(@Query)来过滤我的案例中的结果

我不熟悉Spring JPA和存储库之类的东西。我有一个拍卖类,里面有很多字段,其中一个字段是category。我希望在Crudepository中有一个自定义方法来按类别过滤结果。姓名

@XmlRootElement 
@Entity(name="AUCTION")
public class Auction implements Serializable{

    private static final long serialVersionUID = 1L;

    @Id
    String id;

    @Column
    @Size(min=5, max=200)
    String title;

    String description;

    @OneToOne(cascade={CascadeType.ALL})
    Category category;

    ....}

类别

@Entity(name="CATEGORY")
//@NamedQuery(name="Category.findByName", query="select c from Category c where c.name=:name")
public class Category implements Serializable{

    private static final long serialVersionUID = 3L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    private Integer id;

    private String name;

    public Category()
    {

    }

在拍卖库中,我添加了如下方法

@Repository
public interface AuctionRepository extends CrudRepository<Auction, String>{

    @Query("from Auction a join a.category c where c.name=:categoryName")
    public Iterable<Auction> findByCategory(String categoryName);

}

这是一个错误。省略这个方法,一切都很好。有人告诉我,这种类型的自定义方法可以在Crudepository中声明,Spring将负责使用我们提供的methodName和查询提示做正确的事情。有人能给我指一下正确的方向吗


共 (1) 个答案

  1. # 1 楼答案

    您需要向方法变量名添加@Param注释,以便在查询中引用它。您编写的代码绝对是好的。如果您需要访问EntityManager,那么您将需要一个自定义存储库

    @Query("from Auction a join a.category c where c.name=:categoryName")
    public Iterable<Auction> findByCategory(@Param("categoryName") String categoryName);
    

    在使用Java8和使用-parameters编译时@Param可以省略

    希望有帮助

    提示:无论何时发布问题,都要发布异常详细信息。这有助于理解这个问题