Java 如何从接口方法定义中调用@namedquerys?

Java 如何从接口方法定义中调用@namedquerys?,java,spring,jpa,spring-data-jpa,Java,Spring,Jpa,Spring Data Jpa,我是Spring框架的新手,我想知道是否可以调用实体命名查询,只在接口上定义命名查询,而不进行任何实现 我想做这样的事 NamedQuery(name = "StateBo.findByCountry", query = "SELECT state FROM StateBo state WHERE state.country.id = ?") @Table(name = "STATE") @Entity(name = "StateBo") public class StateBo extends

我是Spring框架的新手,我想知道是否可以调用实体命名查询,只在接口上定义命名查询,而不进行任何实现

我想做这样的事

NamedQuery(name = "StateBo.findByCountry", query = "SELECT state FROM StateBo state WHERE state.country.id = ?")
@Table(name = "STATE")
@Entity(name = "StateBo")
public class StateBo extends BaseNamedBo {

  private static final long serialVersionUID = 3687061742742506831L;

  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "STATE_ID")
  private Long id;

  @Column(name = "ISO_CODE")
  private String isoCode;

  @ManyToOne
  @JoinColumn(name = "COUNTRY_ID")
  private CountryBo country;

  // getters and setters ...
}
@Transactional
@Repository("stateDao")
public class StateDao implements IStateDao {

}
我定义了命名查询StateBo.findByBCountry,我的界面如下所示

public interface IStateDao extends JpaRepository<StateBo, Long> {

    public List<StateBo> findByCountry(Long id);

}

但我有一个错误,我必须实现我在接口上定义的方法,但我不想这样做。我只想定义我的命名查询,并在我的接口中使用实体上相同的名称定义方法,而不添加该方法的实现,因为该实现基本上是名为Query的字符串。您可以使用Spring数据Jpa项目。 首先,你看

要在没有实现(仅接口)的情况下执行查询,请参阅

基本上,您不需要实现:

@Transactional
@Repository("stateDao")
public class StateDao implements IStateDao {

} 

尝试删除它,看看会发生什么。

自动连线注释会发生什么?因为,我正在使用存储库注释在其他类别中自动连线?自动连线无法工作,因为没有实现。Spring为您执行实现。参见指南(第一个链接),那里没有实现。Spring最初是这样做的。