Java 如何在crud存储库的实现中对查询函数进行编码
所以通常,我只有一个接口来实现crudepository并将@Query放在其中。然而,对于这一点,我有一个作为repo的DAO类和一个实现该repo的DAOImpl。因此,我实现了我只想使用查询并将该查询作为字符串列表返回的方法。我的问题是如何对实现中的部分进行编码,以便只传递字符串列表Java 如何在crud存储库的实现中对查询函数进行编码,java,crud,Java,Crud,所以通常,我只有一个接口来实现crudepository并将@Query放在其中。然而,对于这一点,我有一个作为repo的DAO类和一个实现该repo的DAOImpl。因此,我实现了我只想使用查询并将该查询作为字符串列表返回的方法。我的问题是如何对实现中的部分进行编码,以便只传递字符串列表 public interface DealerDAO { /** * @return List of Marketing Orgs */ public Map<Str
public interface DealerDAO {
/**
* @return List of Marketing Orgs
*/
public Map<String, MarketOrg> getMarketStructure();
@Query(
value="SELECT DISTINCT ...",
nativeQuery = true)
List<String> findDealerCode(String marketOrg, String region, String district);
}
因此,我不完全理解您的需求,但我猜您不想为FindDelercode方法提供实现,但仍然希望为getMarketStructure添加一个实现以返回映射。如果是这样,与其为DealerDAO接口提供一个实现,不如在接口本身中使用一个默认的方法实现。通过这种方式,您仍然可以扩展CRUD存储库,使用默认的spring实现,并且仍然可以获得您想要实现的目标。例如:
public interface DealerDAO extends CrudRepository<Obj,Obj> {
/**
* @return List of Marketing Orgs
*/
default public Map<String, MarketOrg> getMarketStructure() {
HashMap<String, MarketOrg> mktOrgs = new HashMap<String, MarketOrg>();
/* Extra code */
return mktOrgs;
}
@Query(
value="SELECT DISTINCT ...",
nativeQuery = true)
List<String> findDealerCode(String marketOrg, String region, String district);
}
然后,您可以在类中实现DealErrorRepositoryCustom接口,如:
@Repository
@Transactional(readOnly = true) // if you don't plan on modifying
public class DealerCustomRepositoryImpl implements DealerRepositoryCustom {
@PersistenceContext
private EntityManager em;
@Override
public List<String> findDealerCode(String marketOrg, String region, String district) {
//This should return something, not null.
return null;
}
}
作为参考。我想我在发布getMarketStructure方法时删掉了太多的代码。默认设置几乎可以工作,但是如果我把它放在DAO中,我不能带上我的持久性注释,也不能像在getMarketStructure中那样使用nativeQuery。在我的原始帖子中更新了代码,但是是的,我想为getMarketStructure函数提供实现,但是如果我不需要为FindDelercode函数提供实现,我不想这样做。我只需要查询中的字符串列表。如果您需要在此方法中使用实体管理器,我建议您仅为此特定方法使用一个单独的接口并实现它,这样您就可以在另一个接口中使用默认crud实现。@DevinM我刚刚用另一种方法更新了答案,检查它是否适合你的情况或者你想要达到的目标。嗯,这实际上是一个非常干净的方法。非常感谢。
@Repository
public interface DealerDAO extends CrudRepository<Obj,Obj>, DealerRepositoryCustom {
@Query(
value="SELECT DISTINCT ...",
nativeQuery = true)
List<String> findDealerCode(String marketOrg, String region, String district);
}
public interface DealerRepositoryCustom {
public Map<String, MarketOrg> getMarketStructure();
}
@Repository
@Transactional(readOnly = true) // if you don't plan on modifying
public class DealerCustomRepositoryImpl implements DealerRepositoryCustom {
@PersistenceContext
private EntityManager em;
@Override
public List<String> findDealerCode(String marketOrg, String region, String district) {
//This should return something, not null.
return null;
}
}