2017-06-15 5 views
2

Ich habe zwei Entitätsklassen und Repository sieht wie folgt aus. Ich mache jpql Abfrage auswählen.JPQL viele zu viele Abfrage auswählen

Subscription.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); 
    } 
} 

Auswahlabfrage Erzeugungs:

wählen ... von abc BP_ inneren abc_subscription verbinden ... Exklusionsverknüpfung Abonnement subscripti2_ auf ... wo subscripti2_.SubscriptionId =?

...: - es hat etwas an diesem Ort.

Obwohl ich Abc und Subskription beitreten, aber in Abfrage Hibernate Erstellen einer weiteren Entität getrennt durch _. d. h. abc_subscription.

Irgendeine Idee, was ich falsch mache? Danke im Voraus.

+0

ich es nicht bekommen, was mit dieser Abfrage falsch ist? Erwarten Sie noch etwas? Machst du dir nur Sorgen wegen der Namen? –

+0

Ich erwarte Abfrage: Wählen Sie ... aus abc bp_ innere Join Subscription subscripti2_ on ... where subscripti2_.SubscriptionId =? – Akkave

+0

Warum erwarten Sie, dass es so ist? Sie verwenden eine 'ManyToMany'-Beziehung, daher wird sie standardmäßig mit einer Join-Tabelle'Abc_subscription' dargestellt. –

Antwort

1

@ManyToMany sollte in Szenarien verwendet werden, in denen eine Verknüpfungstabelle zwischen Entitäten vorhanden ist.

Wenn nicht angegeben ist, ist die vom Persistence Provider verwendete Standardverknüpfungstabelle die Verkettung beider Entitäten, die durch ein "_" getrennt sind. Obendrein, f nicht angegeben, die angenommenen Spaltennamen in der Linktabelle wären die @Id Feldnamen, wie für die Entitätsklassen definiert.

Versuchen Sie, die Spezifikation und passen Sie Ihre Situation entsprechend zu folgen: ManyToMany javadoc