Problème: J'essaye de charger dans la grille seulement les ordres d'achat pour quel nom de pays est ... disons l'Irlande. La chose est que je ne sais pas vraiment si c'est possible. Jusqu'ici j'ai essayé de changer la méthode dans la classe de service executeQueryFindAll()
à quelque chose comme ceci.Spring PagingAndSortingRepository - trouver par nom
private Page<PurchaseOrder> executeQueryFindAll(int page, int maxResults) {
final PageRequest pageRequest = new PageRequest(page, maxResults, sortByNameASC());
Page<PurchaseOrder> purchaseOrders = purchaseOrderRepository.findAll(pageRequest);
Page<PurchaseOrder> selectedPurchaseOrders = new Page<PurchaseOrder>(); //not possibile to instantiate as Page is abstract
for(PurchaseOrder next : purchaseOrders){
if(next.getCountry().getCountryname().toString().equals("Ireland"))
selectedPurchaseOrders.add(next); //thats lame because is not a LIST so it wont work
}
return selectedPurchaseOrders;
}
L'approche ci-dessus ne fonctionnera pas car Page est une classe abstraite, elle ne peut donc pas être instanciée. Je peux traverser mais je ne peux pas faire selectedPurchaseOrders.add(next)
parce que ce n'est pas une liste. En mode débogage je peux évaluer le next.getCountry().getCountryname().toString()
et j'obtiens le nom du pays et c'est pourquoi j'ai essayé de comparer l'objet String .equals("Ireland"))
.
Une suggestion?
Modèle
@Entity
@Table(name = "PURCHASEORDER",schema = "POTOOL")
public class PurchaseOrder {
@Id
@GeneratedValue
private int id;
//other PurchaseOrder properties
@ManyToOne(fetch=FetchType.EAGER)
@JoinColumn(name = "country_id")
private Country country;
//Getter and Setters
dépôt
public interface PurchaseOrderRepository extends
PagingAndSortingRepository<PurchaseOrder, Integer> {
Page<PurchaseOrder> findByTowerLike(Pageable pageable, String name);
}
service
@Service
@Transactional
public class PurchaseOrderService {
@Autowired
private PurchaseOrderRepository purchaseOrderRepository;
@Transactional(readOnly = true)
public PurchaseOrderListVO findAll(int page, int maxResults) {
Page<PurchaseOrder> result = executeQueryFindAll(page, maxResults);
if(shouldExecuteSameQueryInLastPage(page, result)){
int lastPage = result.getTotalPages() - 1;
result = executeQueryFindAll(lastPage, maxResults);
}
return buildResult(result);
}
private Page<PurchaseOrder> executeQueryFindAll(int page, int maxResults) {
final PageRequest pageRequest = new PageRequest(page, maxResults, sortByNameASC());
return purchaseOrderRepository.findAll(pageRequest);
}
//rest of the class
Merci, je l'ai trié.Je connaissais la "Création de requêtes à partir des noms de méthodes" mais je ne savais pas qu'il était également possible de faire quelque chose comme findByCountryCountryName alors que Country est une entité séparée qui dans mon cas est mappée comme une relation ManytoOne dans la classe PurchaseOrder – user2342259