@SuppressWarnings({ "rawtypes", "unchecked" }) protected <P extends Property<?>> void setupItemConverter(Datastore datastore, DataTarget<?> dataTarget, Iterable<P> properties) { if (selectProperty != null && PathProperty.class.isAssignableFrom(selectProperty.getClass()) && !getInstance().getItemConverter().isPresent()) { itemConverter(value -> { if (value != null) { return datastore.query().target(dataTarget).filter(((PathProperty) selectProperty).eq(value)) .findOne(properties).orElse(null); } return null; }); } }
@SuppressWarnings({ "rawtypes", "unchecked" }) protected <P extends Property<?>> void setupItemConverter(Datastore datastore, DataTarget<?> dataTarget, Iterable<P> properties) { if (selectProperty != null && PathProperty.class.isAssignableFrom(selectProperty.getClass()) && !getInstance().getItemConverter().isPresent()) { itemConverter(value -> { if (value != null) { return datastore.query().target(dataTarget).filter(((PathProperty) selectProperty).eq(value)) .findOne(properties).orElse(null); } return null; }); } }
@SuppressWarnings({ "rawtypes", "unchecked" }) public void joins() { // tag::joins[] final DataTarget TARGET1 = DataTarget.named("testTarget1"); final PathProperty<Integer> PROPERTY1 = TARGET1.property("test", Integer.class); final DataTarget TARGET2 = DataTarget.named("testTarget2"); final PathProperty<Integer> PROPERTY2 = TARGET2.property("test", Integer.class); RelationalTarget<String> RT = RelationalTarget.of(TARGET1) // <1> .join(TARGET2, JoinType.INNER).on(PROPERTY2.eq(PROPERTY1)).add(); // <2> RT = RelationalTarget.of(TARGET1).innerJoin(TARGET2).on(PROPERTY2.eq(PROPERTY1)).add(); // <3> RT = RelationalTarget.of(TARGET1).leftJoin(TARGET2).on(PROPERTY2.eq(PROPERTY1)).add(); // <4> RT = RelationalTarget.of(TARGET1).rightJoin(TARGET2).on(PROPERTY2.eq(PROPERTY1)).add(); // <5> Stream<Integer> results = getDatastore().query().target(RT).stream(PROPERTY1); // <6> // end::joins[] }
restriction = PROPERTY1.eq(7); // equal to a value restriction = PROPERTY1.eq(PROPERTY2); // equal to another property restriction = PROPERTY1.neq(7); // not equal restriction = PROPERTY1.lt(7); // less than QueryFilter negation = PROPERTY1.eq(7).not(); // negation QueryFilter conjuction = PROPERTY1.isNotNull().and(PROPERTY2.eq(3)); // conjuction QueryFilter disjunction = PROPERTY1.isNull().or(PROPERTY2.eq(3)); // disjunction
public void selectable11() { // tag::selectable11[] Datastore datastore = obtainDatastore(); final PathProperty<Long> ID = PathProperty.create("id", Long.class); final PathProperty<String> DESCRIPTION = PathProperty.create("description", String.class); final DataTarget<?> TARGET = DataTarget.named("testData"); final PropertySet<?> PROPERTIES = PropertySet.of(ID, DESCRIPTION); SingleSelect<Long> singleSelect = Components.input.singleSelect(ID) .dataSource(datastore, DataTarget.named("testData"), PROPERTIES) .itemConverter( value -> datastore.query().target(TARGET).filter(ID.eq(value)).findOne(PROPERTIES).orElse(null)) // <1> .build(); // end::selectable11[] }
@SuppressWarnings({ "rawtypes", "unchecked" }) public void subquery2() { // tag::subquery2[] Datastore datastore = getDatastore(); // this is supposed to be a relational Datastore implementation final DataTarget TARGET1 = DataTarget.named("testTarget1"); final PathProperty<Integer> PROPERTY1 = TARGET1.property("test", Integer.class); final DataTarget TARGET2 = DataTarget.named("testTarget2"); final PathProperty<Integer> PROPERTY2 = TARGET2.property("test", Integer.class); Stream<Integer> results = datastore.query().target(TARGET1) .filter(SubQuery.create().target(TARGET2).filter(PROPERTY2.eq(PROPERTY1)).exists()).stream(PROPERTY2); // <1> results = datastore.query().target(TARGET1) .filter(SubQuery.create().target(TARGET2).filter(PROPERTY2.eq(PROPERTY1)).notExists()) .stream(PROPERTY2); // <2> // end::subquery2[] }