当前位置: 首页 > 面试题库 >

如何编写自定义的CrudRepository方法(@Query)以过滤我的情况下的结果

唐裕
2023-03-14
问题内容

我是Spring
JPA和Repository的新手。我有一个拍卖类,其中有一堆字段,其中一个字段是类别。我想要CrudRepository中的自定义方法按Category.name过滤结果;

@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);

}

它抛出一个错误。省略此方法,一切正常。有人告诉我,可以在CrudRepository中声明这种自定义方法,Spring会使用methodName和我们提供的查询提示来完成正确的事情。有人能指出我正确的方向吗。


问题答案:

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

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

@Param使用Java 8并使用编译时可以省略-parameters

希望能有所帮助。

提示:每当您发布问题时,也要同时发布异常详细信息。它有助于理解问题。



 类似资料:
  • 我已经挣扎了几天了。我对Spring Boot还是个新手,喜欢不使用XML配置的想法。 我创建了一个RESTfull应用程序(使用JSON)。我正在按照本教程正确配置身份验证。 可以使用 元素上的entry-point-ref属性设置AuthenticationEntryPoint。 没有提到任何关于如何使用Java配置来实现它的内容。 那么如何在不使用XML的情况下“注册”自己的以防止在使用Fo

  • 我读到了Crudrepository,这是一个接口,用于在特定类型的存储库上进行通用CRUD操作。 但是我们可以创建我们的自定义接口并扩展CrudRepository。

  • 我需要为密码字段设置一个错误,条件是“只允许2到22个字符和符号,\-” 但是我有点困在这里了。 这是我到目前为止得到的: 但问题是,如果我输入了_或-以外的符号,错误消息仍然不会显示。对于输入长度,错误消息显示为它应该显示的样子。

  • 问题内容: 假设我以ng-repeat以表格格式显示以下数据。 以上代码取自http://code.ciphertrick.com/2015/06/01/search-sort-and-pagination- ngrepeat-angularjs/ 这样我们就可以搜索。无论用户在搜索文本框中输入哪种内容,都将基于该过滤器生成数据,但是我的要求有些不同。 我将有一个下拉列表,其中将填充所有字段名称,

  • 问题内容: 我有一个简单的场景:向每个HTTP响应自动添加响应标头;我想用Java做到这一点。 看一下,有一些动作示例可以用作注释。我想避免添加到每个处理程序。 综观斯卡拉过滤器中,并具体地讲,我看到一个明确的机制,但我不熟悉不够使用Scala推断为Java。 所以:我从这里去哪里? 问题答案: 不幸的是,目前还没有一种从Java创建和使用过滤器的好方法。但是,您可以使用Scala轻松完成所需的工

  • 问题内容: 我正在将NHibernate与旧的rdbms规则引擎一起使用。我正在使用GenericDialect,但生成的某些sql无法正常工作。如果我需要为此规则引擎编写自定义方言,该如何开始? 问题答案: 这是一个方言示例: 它所在的程序集引用了NHibernate.dll hibernate.cfg.dll(请注意,我这里没有设置’connection.connection_string’属