- All Implemented Interfaces:
org.neo4j.driver.internal.AsValue
,InternalValue
,MapAccessor
,MapAccessorWithDefaultValue
,Value
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescription<T> T
Maps this value to the given type providing that is it supported.double
asDouble()
Returns a Java double if no precision is lost in the conversion.float
asFloat()
Returns a Java float if no precision is lost in the conversion.int
asInt()
Returns a Java int if no precision is lost in the conversion.long
asLong()
Returns a Java long if no precision is lost in the conversion.asNumber()
boolean
int
hashCode()
toString()
type()
Methods inherited from class org.neo4j.driver.internal.value.NumberValueAdapter
asObject
Methods inherited from class org.neo4j.driver.internal.value.ValueAdapter
asBoolean, asBoolean, asByteArray, asByteArray, asDouble, asEntity, asFloat, asInt, asIsoDuration, asIsoDuration, asList, asList, asList, asList, asLocalDate, asLocalDate, asLocalDateTime, asLocalDateTime, asLocalTime, asLocalTime, asLong, asMap, asMap, asMap, asMap, asMapped, asNode, asOffsetDateTime, asOffsetDateTime, asOffsetTime, asOffsetTime, asPath, asPoint, asPoint, asRelationship, asString, asString, asValue, asZonedDateTime, asZonedDateTime, computeOrDefault, containsKey, get, get, hasType, isEmpty, isFalse, isNull, isTrue, keys, size, typeConstructor, values, values
Methods inherited from class org.neo4j.driver.internal.types.InternalMapAccessorWithDefaultValue
get, get, get, get, get, get, get, get, get, get, get, get, get, get, get, get, get
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.neo4j.driver.internal.value.InternalValue
as, as
-
Constructor Details
-
FloatValue
public FloatValue(double val)
-
-
Method Details
-
type
- Returns:
- The type of this value as defined in the Neo4j type system
-
asNumber
- Specified by:
asNumber
in interfaceValue
- Specified by:
asNumber
in classNumberValueAdapter<Double>
- Returns:
- the value as a Java Number, if possible.
-
asLong
public long asLong()Description copied from interface:Value
Returns a Java long if no precision is lost in the conversion.- Specified by:
asLong
in interfaceValue
- Overrides:
asLong
in classValueAdapter
- Returns:
- the value as a Java long.
-
asInt
public int asInt()Description copied from interface:Value
Returns a Java int if no precision is lost in the conversion.- Specified by:
asInt
in interfaceValue
- Overrides:
asInt
in classValueAdapter
- Returns:
- the value as a Java int.
-
asDouble
public double asDouble()Description copied from interface:Value
Returns a Java double if no precision is lost in the conversion.- Specified by:
asDouble
in interfaceValue
- Overrides:
asDouble
in classValueAdapter
- Returns:
- the value as a Java double.
-
asFloat
public float asFloat()Description copied from interface:Value
Returns a Java float if no precision is lost in the conversion.- Specified by:
asFloat
in interfaceValue
- Overrides:
asFloat
in classValueAdapter
- Returns:
- the value as a Java float.
-
as
Description copied from interface:Value
Maps this value to the given type providing that is it supported.Basic Mapping
Supported destination types depend on the value
Type
, please see the table below for more details.Object Mapping
Mapping of user-defined properties to user-defined types is supported for the following value types:
Example (using the Neo4j Movies Database):
// assuming the following Java record public record Movie(String title, String tagline, long released) {} // the nodes may be mapped to Movie instances var movies = driver.executableQuery("MATCH (movie:Movie) RETURN movie") .execute() .records() .stream() .map(record -> record.get("movie").as(Movie.class)) .toList();
Note that Object Mapping is an alternative to accessing the user-defined values in a
MapAccessor
. If Object Graph Mapping (OGM) is needed, please use a higher level solution built on top of the driver, like Spring Data Neo4j.The mapping is done by matching user-defined property names to target type constructor parameters. Therefore, the constructor parameters must either have
Property
annotation or have a matching name that is available at runtime (note that the constructor parameter names are typically changed by the compiler unless either the compiler-parameters
option is used or they belong to the cannonical constructor ofjava.lang.Record
). The name matching is case-sensitive.Additionally, the
Property
annotation may be used when mapping a property with a different name tojava.lang.Record
cannonical constructor parameter.The constructor selection criteria is the following (top priority first):
- Maximum matching properties.
- Minimum mismatching properties.
Class.getDeclaredConstructors()
and is finished either when a full match is found with no mismatches or once all constructors have been visited.At least 1 property match must be present for mapping to work.
A
null
value is used for arguments that don't have a matching property. If the argument does not acceptnull
value (this includes primitive types), an alternative constructor that excludes it must be available.The mapping only works for types with directly accessible constructors, not interfaces or abstract types.
Example with optional property (using the Neo4j Movies Database):
// assuming the following Java record public record Person(String name, long born) { // alternative constructor for values that don't have 'born' property available public Person(@Property("name") String name) { this(name, -1); } } // the nodes may be mapped to Person instances var persons = driver.executableQuery("MATCH (person:Person) RETURN person") .execute() .records() .stream() .map(record -> record.get("person").as(Person.class)) .toList();
Types with generic parameters defined at the class level are not supported. However, constructor arguments with specific types are permitted.
Example (using the Neo4j Movies Database):
// assuming the following Java record public record Acted(List<String> roles) {} // the relationships may be mapped to Acted instances var actedList = driver.executableQuery("MATCH ()-[acted:ACTED_IN]-() RETURN acted") .execute() .records() .stream() .map(record -> record.get("acted").as(Acted.class)) .toList();
public record Acted<T>(List<T> roles) {}
- Type Parameters:
T
- the target type to map to- Parameters:
targetClass
- the target class to map to- Returns:
- the mapped value
- See Also:
-
equals
- Specified by:
equals
in interfaceValue
- Specified by:
equals
in classValueAdapter
-
hashCode
public int hashCode()- Specified by:
hashCode
in interfaceValue
- Specified by:
hashCode
in classValueAdapter
-
toString
- Specified by:
toString
in interfaceValue
- Specified by:
toString
in classValueAdapter
-
asBoltValue
-