Quelle est la différence entre @Override et @Transactionnal ?

par | Nov 7, 2022 | Axelor | 0 commentaires

Vous avez peut-être déjà croisé ces deux termes un peu barbares en travaillant dans un fichier Java pour un projet Axelor… A quoi servent ils, quelles sont leurs spécificités ? On vous explique tout cela dans cet article.

@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 :

Vous avez besoin d’un logiciel ERP ou de sous-traiter son développement ? Contactez-nous au plus vite !