我是Spring Framework的新手,我想知道是否可以调用实体命名查询,只在界面上定义命名查询而不进行任何实现。
我想做这样的事情。
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 ...
}
我定义了命名查询 StateBo.findByBCountry ,我的界面看起来像这样
public interface IStateDao extends JpaRepository<StateBo, Long> {
public List<StateBo> findByCountry(Long id);
}
接口实现看起来像这样。
@Transactional
@Repository("stateDao")
public class StateDao implements IStateDao {
}
但我有错误,我必须实现我在我的界面上定义的方法,但我不想这样做。我只想定义我的命名查询,并在我的接口中使用与实体相同的名称定义方法,并且不添加该方法的实现,因为实现基本上是字符串命名查询
答案 0 :(得分:0)
您可以使用Spring Data Jpa项目。 首先,您会看到https://spring.io/guides/gs/accessing-data-jpa/
要在没有实现(仅限界面)的情况下执行查询,请参阅http://docs.spring.io/spring-data/jpa/docs/1.6.0.RELEASE/reference/htmlsingle/#jpa.query-methods.at-query
基本上你不需要实施:
@Transactional
@Repository("stateDao")
public class StateDao implements IStateDao {
}
尝试删除它,看看会发生什么。