Table des matières
@Override
Dans le cas d’un héritage, on vient dire que l’on veut utiliser cette méthode et non pas celle du parent.
public class NewOrderCheckerServiceImpl extends OrderCheckerServiceImpl {
@Override
public boolean canCancel(Order order) {
return super.canCancel(order)
|| order.getStatus() == OrderRepository.STATUS_SELECT_INVOICE_WAITING;
}
}
Dans le cas ci-dessus on décide d’utiliser la méthode canCancel() de NewOrderCheckerServiceImpl plutôt que la méthode canCancel() de OrderCheckerServiceImpl.
@Transactional
C’est le mot clé qui permet d’ouvrir une transaction avec la base de données On le place au dessus d’une méthode qui intéragit avec la base de données.
@Transactional
public boolean cancel(Order order) {
if (this.checkerService.canCancel(order)) {
order.setStatus(OrderRepository.STATUS_SELECT_CANCELED);
orderRepository.save(order);
return true;
}
return false;
}
Ici, on utilise save() donc il faut utiliser le mot clé @transactional.
Finder methodes
Tags pour générer dans le repository des méthodes pour récupérer des objets avec des critères de recherche On peut mettre comme nom de la finder method : findOneQuelqueCode
pour préciser le nombre d’objets que l’on veut retourner. Si on met un all = "true"
, la finder method retourne unn objet query Quand on écrit une finder method, dans le using
on met les champs sur lesquels on va faire la recherche. C’est après, dans une classe java (voir l’exemple en dessous dans le bloc de code), que l’on va dire quels valeurs on recherche. Par exemple, on va dire que l’on recherche le contact qui a pour nom Joe et pour prénom Leborne. Les finder methodes, quand on les a écrites dans les domains, sont automtiquement générées dans les build. Elles sont par exemple dans le dossier java/main/com/axelor/contact/db/repo
, dans des fichiers .class
(voir image en dessous)
Exemple :
import ContactRepository
public class ContactCOntroller{
public void testRepository(){
ContactRepository repo = Beans.get(ContactRepository.class);
Query query = repository.findByLastNameAndFirstName("Joe", "Leborne"); // Sauf erreur, le findByLastNameAndFirstName est une finder method définie ailleurs
query.count();
query.fetch() // retourne un tableau avec les objets trouvés et mes différents champs de l'objet
Exemple de code java contenant la définition d’une finder method : On peut aussi faire sans la finder method :