2016-07-26 6 views
0

Ich habe eine manyToMany-Beziehung zwischen zwei Tabellen, wenn ich eine Join-Abfrage zwischen diesen beiden Tabellen schreibe, bekomme ich einen Fehler beim Laden des Projekts. Hier"org.hibernate.HibernateException: Fehler in benannten Abfragen" in manyToMany Join Abfrage

ist die Abfrage:

@NamedQueries ({ 
@NamedQuery(name = "LicenseComponentDefinition.findByProductVerKeyType", query = "SELECT c from LicenseComponentDefinition c join c.licenseKeyTypes lkt WHERE lkt.keyTypeId = :keyTypeId AND WHERE c.product.productId = :productID AND c.productVersionByVersionStartId.versionId <= :versionId AND c.productVersionByVersionEndId.versionId >= :versionId") 

})

Und die Entity-Klasse sieht aus wie unter

private Set<LicenseKeyType> licenseKeyTypes = new HashSet<LicenseKeyType>(0); 
@ManyToMany(fetch = FetchType.LAZY) 
@JoinTable(name = "component_definition_keytypes", catalog = "ldbredesigned", joinColumns = { 
     @JoinColumn(name = "component_definition_id", nullable = false, updatable = false) }, inverseJoinColumns = { 
       @JoinColumn(name = "license_key_type_id", nullable = false, updatable = false) }) 
public Set<LicenseKeyType> getLicenseKeyTypes() { 
    return this.licenseKeyTypes; 
} 

Es funktioniert gut, wenn ich die Klausel aus der Abfrage verbinden entfernen. Wie unten

SELECT c from LicenseComponentDefinition c WHERE c.product.productId = :productID AND c.productVersionByVersionStartId.versionId <= :versionId AND c.productVersionByVersionEndId.versionId >= :versionId 

Kann jemand helfen? Danke.

Antwort

0

Ihre benannte Abfrage hat 2 WHERE Schlüsselwörter in es:

SELECT c 
from LicenseComponentDefinition c join c.licenseKeyTypes lkt 
WHERE lkt.keyTypeId = :keyTypeId 
AND WHERE c.product.productId = :productID 
AND c.productVersionByVersionStartId.versionId <= :versionId 
AND c.productVersionByVersionEndId.versionId >= :versionId") 

die 2. ein für den Anfang schießen.

Verwandte Themen