2 votes

Requête JPQL many to many select

J'ai deux classes d'entités et le référentiel ressemble à ce qui suit. Je fais une requête jpql select.

Abonnement.java

@Entity
@Table(name="Subscription")
public class Subscription implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="SubscriptionId", nullable=false)
    private Integer subscriptionId;

    @Column(name="BaseProductId", nullable=false)
    private Integer baseProductId;

    @ManyToMany(fetch = FetchType.LAZY, mappedBy="subscription")
    private List<Abc> abc;
}

Abc.java

@Entity
@Table(name="abc")
public class Abc implements Serializable {
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy=GenerationType.AUTO)
    @Column(name="SubscriptionId", nullable=false)
    private Integer id;

    @ManyToMany(fetch = FetchType.LAZY)
    @JoinColumn(name="id", referencedColumnName="BaseProductId", insertable = false, updatable = false, nullable = false)
    private List<Subscription> subscription;
}

AbcRepository.java

@Repository
public interface AbcRepository extends JpaRepository<Abc, Integer> {

    @Query(value="SELECT bpp FROM Abc bpp JOIN bpp.subscription s WHERE s.subscriptionId = ?1")
        public List<Abc> findBppm(Integer a);
    }
}

Sélectionnez la génération de requêtes :

select ... from abc bp_ inner join abc_subscription ... inner join Subscription subscripti2_ on ... where subscripti2_.SubscriptionId= ?

... :- il y a quelque chose à cet endroit.

Je joins abc et subscription, mais dans la requête, Hibernate crée une entité supplémentaire séparée par _, c'est-à-dire abc_subscription.

Une idée de ce que je fais mal ? Merci d'avance.

2voto

Maciej Kowalski Points 12727

@ManyToMany doit être utilisé dans les scénarios où il existe une table de liaison entre les entités.

Si @JoinTable n'est pas spécifié, la table de liens par défaut utilisée par le fournisseur de persistance sera la concaténation des deux entités séparées par un "_". De plus, si cette option n'est pas spécifiée, les noms de colonnes présumés dans la table de liens seront les suivants @Id les noms des champs tels que définis dans les classes d'entités.

Essayez de suivre les spécifications et adaptez votre situation en conséquence : javadoc ManyToMany

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X