JPA MySQL DOUBLE (6,2) mit LIKE filtern


sven-meye

Mitglied
Hallo zusammen,

ich habe folgendes Problem. Und zwar habe ich folgende Methode:
Java:
public List<Mitarbeiter> getFilteredMitarbeiter(Optional<String> kuerzel, Optional<String> nachname, Optional<String> vorname, Optional<String> stundensatz) {

    EntityManager entityManager = TTREntityManagerFactory.getInstance().createEntityManager();
    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery criteriaQuery = criteriaBuilder.createQuery();
    Root mitarbeiter = criteriaQuery.from(Mitarbeiter.class);

    kuerzel.ifPresent(k -> criteriaQuery.where(criteriaBuilder.like(criteriaBuilder.upper(mitarbeiter.get("kuerzel")), "%" + k.toUpperCase() + "%")));
    nachname.ifPresent(n -> criteriaQuery.where(criteriaBuilder.like(criteriaBuilder.upper(mitarbeiter.get("nachname")), "%" + n.toUpperCase() + "%")));
    vorname.ifPresent(v -> criteriaQuery.where(criteriaBuilder.like(criteriaBuilder.upper(mitarbeiter.get("vorname")), "%" + v.toUpperCase() + "%")));
    stundensatz.ifPresent(s -> criteriaQuery.where(criteriaBuilder.like(mitarbeiter.get("stundensatz"), "%" + s + "%")));

    RepositoryUtils<List<Mitarbeiter>> repositoryUtils = new RepositoryUtils<>();
    JpaFunction<List<Mitarbeiter>> function = () -> entityManager.createQuery(criteriaQuery).getResultList();
    return repositoryUtils.withoutTransaction(entityManager, function);
}
Nun habe ich das Problem, das der Stundensatz in der Datenbank als DOUBLE (6,2) gespeichert ist. Diesen Wert kann ich nun mit der Übergabe eines Strings mit LIKE nicht filtern. Er wirft immer eine Exception. Bei der anderen Entität, hat das mit einem INTEGER sehr gut funktioniert. Nun möchte ich den DOUBLE ebenfalls mit LIKE filtern können. Leider finde ich dazu nicht wirklich etwas, das auch funktioniert, im Internet. Auch wenn ich konvertiere, wirft er weiter Exceptions. Wie geht das richtig? Ich versuche dies nun schon den halben Nachmittag und könnte wirklich Hilfe gebrauchen.

Kurz und bündig: Wie filtere ich einen DOUBLE-Wert mit JPA Criteria LIKE?

Freundliche Grüsse & vielen Dank
sven_meye
 

Hinweis: Wenn du jetzt Java lernen möchtest, dann schau dir diese kurze Präsentation hier an (hier klicken!)
Sichere dir hier den Zugriff auf umfangreiches Java-Know How und starte richtig durch!

Hinweis: Wenn du jetzt Java lernen möchtest, dann schau dir diese kurze Präsentation hier an (hier klicken!)
Sichere dir hier den Zugriff auf umfangreiches Java-Know How und starte richtig durch!

Thallius

Bekanntes Mitglied
Kurz und bündig:

Preise und andere Währungsdaten werden immer als cent (integer, long) gespeichert. Niemals als double. Alleine die Rundungsfehler bei double brechen dir bei Geldbetragsrechnungen irgendwann immer das Genick.

Gruß

Claus
 

sven-meye

Mitglied
Naja, ich finde gerade keinen anderen Weg, z.B. alle Werte, die die Zahl 2 enthalten, herauszufiltern. Wenn es was anderes gibt, dann tell me.
 

mrBrown

Super-Moderator
Mitarbeiter
Warum sind denn alle Werte, die eine 2 enthalten interessant?
Ich mein, 253937 und 0,02 haben ja schon ziemlich wenig gemeinsam...
 

mrBrown

Super-Moderator
Mitarbeiter
Oder man weist auf sinnloses Design in Verbindung mit sinnlosen Anforderungen hin.

Ich weiß was mir lieber ist...
 

Passende Stellenanzeigen aus deiner Region:


Neue Themen

Oben