org.dellroad.querystream.jpa.DoubleValue Maven / Gradle / Ivy
/*
* Copyright (C) 2018 Archie L. Cobbs. All rights reserved.
*/
package org.dellroad.querystream.jpa;
import java.util.Calendar;
import java.util.Date;
import java.util.Map;
import java.util.function.Consumer;
import java.util.function.Function;
import javax.persistence.FlushModeType;
import javax.persistence.LockModeType;
import javax.persistence.NoResultException;
import javax.persistence.Parameter;
import javax.persistence.TemporalType;
import javax.persistence.criteria.Expression;
import javax.persistence.criteria.Selection;
/**
* A double {@link ExprValue}.
*/
public interface DoubleValue extends ExprValue>, DoubleStream {
/**
* Build and evaluate a JPA query based on this instance and return the single non-NULL result.
*
*
* This variant of {@link #value} is useful when it is known that NULL won't be returned.
*
* @return result of executed query
* @throws NoResultException if the query returns NULL
*/
default double doubleValue() {
final Double value = this.value();
if (value == null)
throw new NoResultException("NULL value returned from query");
return (double)value;
}
// Narrowing overrides (QueryStream)
@Override
DoubleValue bind(Ref> ref);
@Override
DoubleValue peek(Consumer super Expression> peeker);
@Override
> DoubleValue bind(
Ref ref, Function super Expression, ? extends S2> refFunction);
@Override
DoubleValue filter(Function super Expression, ? extends Expression> predicateBuilder);
@Override
DoubleValue withFlushMode(FlushModeType flushMode);
@Override
DoubleValue withLockMode(LockModeType lockMode);
@Override
DoubleValue withHint(String name, Object value);
@Override
DoubleValue withHints(Map hints);
@Override
DoubleValue withParam(Parameter parameter, T value);
@Override
DoubleValue withParam(Parameter parameter, Date value, TemporalType temporalType);
@Override
DoubleValue withParam(Parameter parameter, Calendar value, TemporalType temporalType);
@Override
DoubleValue withParams(Iterable extends ParamBinding>> params);
@Override
DoubleValue withLoadGraph(String name);
@Override
DoubleValue withFetchGraph(String name);
}