Class Pairs
- java.lang.Object
-
- io.ebean.Pairs
-
public class Pairs extends Object
Holds a list of value object pairs.This feature is to enable use of L2 cache with complex natural keys with findList() queries in cases where the IN clause is not a single property but instead a pair of properties.
These queries can have predicates that can be translated into a list of complex natural keys such that the L2 cache can be hit with these keys to obtain some or all of the beans from L2 cache rather than the DB.
// where a bean is annotated with a complex // natural key made of several properties @Cache(naturalKey = {"store","code","sku"}) Pairs pairs = new Pairs("sku", "code"); pairs.add("sj2", 1000); pairs.add("sj2", 1001); pairs.add("pf3", 1000); List<OCachedNatKeyBean3> list = DB.find(OCachedNatKeyBean3.class) .where() .eq("store", "def") .inPairs(pairs) // IN clause with 'pairs' of values .order("sku desc") // query expressions cover the natural key properties // so we can choose to hit the L2 bean cache if we want .setUseCache(true) .findList();Important implementation Note
When binding many pairs of values we want to be able to utilise a DB index (as this type of query usually means the pairs are a unique key/index or part of a unique key/index and highly selective). Currently we know we can do this on any DB that supports expression/formula based indexes. using a DB string concatenation formula
This means, the implementation converts the list of pairs into a list of strings via concatenation and we use a DB concatenation formula to match. We see SQL like:
sql ... where t0.store = ? and (t0.sku||'-'||t0.code) in (?, ? ) // bind values like: "sj2-1000", "pf3-1000"We often create a DB expression index to match the DB concat formula like:
sql create index ix_name on table_name ((sku || '-' || code));
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPairs.EntryA pair of 2 value objects.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description Pairsadd(Object a, Object b)Add a pair of value objects.StringgetConcatSeparator()Return the separator character used with DB varchar concatenation to combine the 2 values.StringgetConcatSuffix()Return a suffix used with DB varchar concatenation to combine the 2 values.List<Pairs.Entry>getEntries()Return all the value pairs.StringgetProperty0()Return the first property name.StringgetProperty1()Return the second property name.PairssetConcatSeparator(String concatSeparator)Set the separator character used with DB varchar concatenation to combine the 2 values.PairssetConcatSuffix(String concatSuffix)Add a suffix used with DB varchar concatenation to combine the 2 values.StringtoString()
-
-
-
Method Detail
-
add
public Pairs add(Object a, Object b)
Add a pair of value objects.Both values are expected to be immutable with equals and hashCode implementations.
- Parameters:
a- Value of the first propertyb- Value of the second property
-
getProperty0
public String getProperty0()
Return the first property name.
-
getProperty1
public String getProperty1()
Return the second property name.
-
getEntries
public List<Pairs.Entry> getEntries()
Return all the value pairs.
-
getConcatSeparator
public String getConcatSeparator()
Return the separator character used with DB varchar concatenation to combine the 2 values.
-
setConcatSeparator
public Pairs setConcatSeparator(String concatSeparator)
Set the separator character used with DB varchar concatenation to combine the 2 values.
-
getConcatSuffix
public String getConcatSuffix()
Return a suffix used with DB varchar concatenation to combine the 2 values.
-
setConcatSuffix
public Pairs setConcatSuffix(String concatSuffix)
Add a suffix used with DB varchar concatenation to combine the 2 values.
-
-