Ejb3-bean entité : relations bidirectionnelles

Contenu du snippet

Ce code vous permet de réaliser une relation bidirectionnelle entre deux entités évitant ainsi les exceptions LazyLoadingException et SaxException de cycles infinis.

Source / Exemple :


// Client.java entité référençant une table de la bdd Oracle.
@Entity
@Table(name = "CLIENT")
@SequenceGenerator (
name="SEQ_CLIENT",
sequenceName="SEQ_CLIENT",
   initialValue = 1
  )
public class Client implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ_CLIENT")
    @Column(name = "ID")
    private Long id;

    @Column(name = "LOGIN", length = 25, nullable = false)
    private String login;

    @Column(name = "PASSWORD", length = 25, nullable = false)
    private String password;

    @OneToMany(mappedBy = "idClients")
    private List<Reservationbilletavion> idClientCA;

    /* setters et getters et constructeurs */
}   

// Reservationbilletavion .java entité référençant une table de la bdd Oracle.
@Entity
@Table(name = "RESERVATIONBILLETAVION")
@SequenceGenerator (
name="SEQ_RESERVATION_BA",
sequenceName="SEQ_RESERVATION_BA",
   initialValue = 1
  )
public class Reservationbilletavion implements Serializable {
    
    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator="SEQ_RESERVATION_BA")
    @Column(name = "ID_RESERVATION_CA")
    private Long idReservationBa;  
    
    @JoinColumn(name = "ID_CLIENT", referencedColumnName = "ID")
    @ManyToOne
    private Client idClients;

    /* setters et getters et constructeurs */

    @XmlTransient // pour éviter les cycles, on isole le getter
    public Client getIdClient() {
        return idClients;
    }
}
// logique métier ClientImplement.java

@Stateless(mappedName="edtc.dao.client")
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class ClientImplement implements IDaoClientLocal, IDaoClientRemote{ // implémente des interfaces métier
    
    @PersistenceContext
    private EntityManager em;

public Client getAllReservationById(int idClient) {
        Client cl = null;
         try {
         // les des réservations de billets d'avions
          cl =  (Client) em.createQuery("SELECT c " +
                                        "FROM Client c " +
                                        "WHERE c.id =:ID"
                                  ).setParameter("ID",  (long) idClient)
                                 .getSingleResult();
          
            
            cl.getIdClientCA().size(); // charger la collection
        
          } catch (Throwable th) {
            throw new edtcException(th, 1);
          }
        return cl;
     
    }

}

// web service WsClientDaoJpa.java
@WebService
public class WsClientDaoJpa implements IDaoClient{

    @EJB
    private IDaoClientLocal dao;

    @WebMethod
    public Client getAllReservationById(int idClient) {
        return dao.getAllReservationById(idClient);
    }

   
}

Conclusion :


Ce code source n'est pas très complets, il faut y rajouter des getters et setters ainsi que les interfaces souhaités.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.