2016-12-23 4 views
0

Ich versuche, eine Zufallszahl zu generieren, so dass ich Stichproben in einem Datensatz in einer JPA-Abfrage tun kann. Ich habe gelesen, das ist völlig überall möglich, aber ich erhalte immer Fehler:Spring JPA Abfrage mit Spel-Ausdruck für zufällige

Code:

@Query("select t from Telemetry t where t.id = :id and t.updateTimestamp between :startTime and :endTime and #{ #T(java.lang.Math).random() } < :samplingRate ") 
Iterable<Telemetry> findFor(@Param("id") String org, @Param("startTime") Instant startTime, @Param("endTime") Instant endTime, @Param("samplingRate") Float samplingRate); 

Fehler:

org.hibernate.QueryException: unexpected char: '#' [select t from com.mz.rad.dao.Telemetry t where t.id = :id and t.updateTimestamp between :startTime and :endTime and #{ #T(java.lang.Math).random() } < :samplingRate ]

Graben tiefer in das ich entdecken diese Ausnahme:

throw new IllegalArgumentException("Parameter with that position [" + parameterPosition + "] did not exist"); 

Parameterposition ist 1 oder 2 Abhängig davon, welche Syntax ich verwende.

Ich habe mit/ohne Hashes versucht. Kein Glück. Ich benutze Postgres, die eine random() Funktion hat, aber es mag nicht, dass ich das auch anrufe (was mein ultimatives Ziel ist).

Diese Frage ist etwa Spel, aber ich brauche nur eine Zufallszahl

Antwort

1

Sie können wie versuchen, diese :#

select t from Telemetry t where t.id = :id and t.updateTimestamp between :startTime and :endTime and :#{T(java.lang.Math).random()} < :samplingRate 

Wenn nicht, dann ?# verwenden

select t from Telemetry t where t.id = :id and t.updateTimestamp between :startTime and :endTime and ?#{T(java.lang.Math).random()} < :samplingRate 
+0

Weder Arbeit zu stoßen. Nächste Idee. Ich habe die Frage aktualisiert –

+0

Ich gab Ihnen eine Upvote aber fand meine eigene Antwort. Müssen zu bump zu –

0

Answer:

@Query("select t from Telemetry t where t.id = :id and t.updateTimestamp between :startTime and :endTime and :#{T(java.lang.Math).random()} < :samplingRate ") 

hilft POM

<dependency> 
     <groupId>org.springframework.data</groupId> 
     <artifactId>spring-data-jpa</artifactId> 
     <version>1.10.5.RELEASE</version> 
    </dependency> 
+0

Ja, ich habe es funktioniert .. jetzt gibt es zufällig alle oder kein Ergebnis 'samplingFactor' mal: -/neue Frage –

Verwandte Themen