2016-05-25 8 views
1

Ich versuche, eine einfache JPQL zu machen für die Verwendung der Entity Id.Spring Data JPA: Check Existiert Entity ID mit @Query Annotation

Meine PlanDetail Entity:

Entity 
@Table(name="T_PLAN_DETAIL") 
public class PlanDetail extends AbstractProcessEntity { 

@ManyToOne 
@JoinColumn(name = "TERRITORY_ID") 
private Territory territory; 
... 
} 

Ich will es prüfen, mit Assert:

Assert.isTrue(planDetailRepository.existsByTerritory(territoryId), "This territory exist with ID = " + territoryId); 

Meine PlanDetail Entity:

public interface PlanDetailRepository extends CrudRepository<PlanDetail, Long> { 

@Query("SELECT COUNT(e)>0 FROM PlanDetail e WHERE e.terrritoryId=?1") 
boolean existsByTerritory(Long territoryId); 
} 

Fehlerprotokoll:

Caused by: java.lang.IllegalArgumentException: org.hibernate.QueryException: could not resolve property: terrritoryId of: test.domain.model.plan.PlanDetail [SELECT COUNT(e)>0 FROM test.domain.model.plan.PlanDetail e WHERE e.terrritoryId=?1] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1750) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1677) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1683) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] 
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.createQuery(AbstractEntityManagerImpl.java:331) ~[hibernate-entitymanager-4.3.11.Final.jar:4.3.11.Final] 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:1.8.0_65] 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[na:1.8.0_65] 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:1.8.0_65] 

Jede Hilfe wird geschätzt. Können Sie mir irgendein JPQL-Dokument empfehlen? Danke.

+0

Hat nicht 'terrritoryId' zu viele r? – reallynice

+0

Ja, ich habe keine territoryId. Aber ich habe Territory-Entity, ich möchte die Territory-ID von Territory Entity überprüfen. –

Antwort

1

Angenommen, Ihre Gebietseinheit hat ein Feld namens "id".

Ihre Suche verfeinern:

@Query("SELECT COUNT(e)>0 FROM PlanDetail e WHERE e.territory.id=?1") 
+0

Ich habe eine einfache Frage, ich begann vor kurzem mit JPA und schreiben Abfragen mit Abfrage Annotation. Werden Query Annotation-Abfragen schneller ausgeführt als die mit Named Queries und fonByProperty? – 89n3ur0n

Verwandte Themen