[hibernate-dev] Adding features to Dialect class
Eric Dalquist
eric.dalquist at doit.wisc.edu
Mon Apr 30 08:02:52 EDT 2012
Could this be a common enough issue that Hibernate includes a
work-around type so that everyone doesn't have to write their own?
We've had to address this wonderful Oracle "feature" via a custom user
type as well, ours is based on http://usertype.sourceforge.net/ and the
NullSafeStringType and NullSafeStringColumnMapper are available here:
https://github.com/Jasig/uPortal/blob/master/uportal-war/src/main/java/org/jasig/portal/dao/usertype/
Our approach is that any non-null string gets prefixed with _ when
stored in the DB
-Eric
On 04/23/2012 01:23 PM, Steve Ebersole wrote:
> Personally I think people relying on this Oracle (mis-)behavior are
> just asking for problems.
>
> But lets say people do agree that we should handle this... so you add a
> method to Dialect to handle detect this environment... how do you plan
> on checking it? Today it is the Types that are responsible for
> equality checking (I assume that is what Envers uses as well). So I am
> just suggesting that the user supplying a custom
> FunkyOracleStringVarcharType Type implementation is probably a better
> option. Unless I misunderstand how Envers is doing the equality
> checking and y'all do not use Types for that.
>
> On Mon 23 Apr 2012 11:18:44 AM CDT, Łukasz Antoniak wrote:
>> Totaly agree that expecting null to be equal to empty string in Java model is wrong.
>>
>> IMO he has spotted that when null string reference is replaced with an empty string, Envers creates new revision. From database
>> perspective (Oracle) two records does not differ in any way. This could be actually handled easily in Envers code. I thought that
>> it would be more elegant to add new dialect feature, but if this behavior is special to Oracle, there is no need.
>>
>> // Revision 1
>> em.getTransaction().begin();
>> StrTestEntity emptyEntity = new StrTestEntity("");
>> em.persist(emptyEntity);
>> em.getTransaction().commit();
>> // Should not generate revision after NULL to "" modification on Oracle. But now it does.
>> em.getTransaction().begin();
>> emptyEntity = em.find(StrTestEntity.class, emptyId);
>> emptyEntity.setStr(null);
>> em.merge(emptyEntity);
>> em.getTransaction().commit();
>>
>> Will use dev mailing list. Sorry for that.
>>
>> Steve Ebersole wrote:
>> > Their better option is to apply a Type for String that handles this.
>> > http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#types-registry
>> >
>> > This is the type of thing we will be able to handle automatically in 5.0
>> >
>> > But as for the forum user's exact question, personally I think him
>> > expecting null and empty string *in the java model* to be handled
>> > equally is just plain wrong.
>> >
>> > P.S., these kinds of questions should be directed at the dev list so we
>> > can get everyone's input.
>> _______________________________________________
>> hibernate-dev mailing list
>> hibernate-dev at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/hibernate-dev
> --
> steve at hibernate.org
> http://hibernate.org
> _______________________________________________
> 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