[hibernate-dev] "matching" table/column names (and naming strategies)

Steve Ebersole steve at hibernate.org
Thu Jul 7 10:23:21 EDT 2016


>
> Personally, I think using straight String comparisons is the main
>> problem.  If you look at the code for Identifier#equals that is really
>> exactly what we need already.
>>
>> We cannot just drop the quotes for an accurate comparison.  "`MY_TABLE`"
>> and "`my_table`" are different tables to each sane and SQL spec compliant
>> database.  But conversely "MY_TABLE" and "my_table" are the same table.
>>
>
> That's true, so if one or both names are quoted, we can remove the quoting
> chars and do a case-sensitive comparison otherwise we we can do a
> case-insensitive comparison, am I right?
>

Correct.  That is more or less what Identifier#equals does, although atm in
the interest of simplicity it simply leverages the
Identifier#getCanonicalName of the 2 Identifiers to perform the
comparison.  Identifier#getCanonicalName lowercases the name if not quoted,
and then #equals compares that return.

We should really adjust this however as it can lead to false positive
hits.  Consider comparing "`my_table`" and "my_table" which really ought to
evaluate to not-equal[1].  However the canonical name in both cases is the
same ("my_table") and so would evaluate to equal.

[1] I believe this is database dependent - whether a quoted and non-quoted
identifier can ever refer to the same database/schema object.


More information about the hibernate-dev mailing list