[hibernate-dev] 6.0 - concept naming

Christian Beikov christian.beikov at gmail.com
Wed Apr 19 06:59:01 EDT 2017


Sounds good. I hope the secondary table stuff is getting defined on a 
higher level(EntityPersister/AbstractEntityPersister). I had problems 
implementing OneToOne-JoinTable support for 
TablePerClass(UnionSubclassPersister) a while ago and I guess that was 
because there is no notion of secondary tables in the EntityPersister. I 
guess that issue would be solved then? :)


Mit freundlichen Grüßen,
------------------------------------------------------------------------
*Christian Beikov*
Am 14.04.2017 um 18:24 schrieb Steve Ebersole:
>   Before I get deeper into this persister work I wanted to discuss some of
> the primary design concepts and start a discussion about naming the
> interfaces/classes related to them.
>
> I am thinking it would be best to model the tables associated with a
> persister using a similar structure we use for
> TableSpace/TableGroup/TableGroupJoin but in the non-specific-reference
> case.  For example, the Person entity might be mapped to 2 tables: the
> primary PERSON table, and a PERSON_SUPP secondary table.  Inside the
> persister we'd map the binding to those tables including the join criteria
> between them.  This is distinctly different from the structure of
> references to those tables as part of a specific query.  So inside
> persister we'd map a structure like:
>
> EntityPersister {
>      ...
>      rootTable = Table( PERSON )
>      secondaryTables = {
>          SecondaryTableBinding {
>              joinType = INNER
>              targetTable = Table( PERSON_SUPP )
>              predicate = {
>                  EQ {
>                      lhs = {
>                          ColumnBinding( Column( Table( PERSON ), "id" )
>                      }
>                      rhs = {
>                          ColumnBinding( Column( Table( PERSON_SUPP ), "p_id"
> )
>                      }
>                  }
>              }
>      }
> }
>
> We could simplify this if we follow the same assumption we do today that
> the secondary tables always use the root table as the lhs.  Additionally we
> might consider simplifying the join predicate to use the ForeignKey which
> already defines this join predicate info:
>
> EntityPersister {
>      ...
>      rootTable = Table( PERSON )
>      secondaryTables = {
>          SecondaryTableBinding {
>              joinType = INNER
>              targetTable = Table( PERSON_SUPP )
>              predicate = ForeignKey {
>                  uid = 123456789ABC
>                  ...
>              }
>          }
>      }
> }
>
>
> Compare this to the structure for a particular query[1], which is different:
>
> TableGroup
>      root = TableReference {
>          table = ( Table( PERSON ) )
>          identifiactionVariable = p0
>          tableJoins = {
>              TableReferenceJoin {
>                  ...
>              }
>          }
>      }
> }
>
> Notice specifically the addition of the identifactionVariable (alias).
> Because we might have multiple references to that same table which need to
> be unique in the given query, e.g. a fetched or joined self-referential
> association (person -> manager).
>
> First, what do you think of these proposed structures?  And secondly what
> are y'alls opinions wrt the names?
>
> FWIW there are 2 main reasons I propose modeling things the way I suggest
> above in terms of the structure on persisters:
>
>     1. I think it makes it easier for consumers of persisters to understand
>     the bindings
>     2. I *think* (tbd) that it makes it easier to "clone" into the query
>     TableGroup structure.
>
> Anyway, would love feedback on this.
>
> [1]  Note that the class called `TableReference` here is called
> `TableBinding` in the currently pushed code, but I'd prefer to change that
> and instead have "binding" term reference the binding of the table in the
> persister model.  I am open to different naming here though.
> _______________________________________________
> hibernate-dev mailing list
> hibernate-dev at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/hibernate-dev



More information about the hibernate-dev mailing list