For historic reasons i have some tables with char(3) primary key in our database. For example the country table.
When i find the entity with:
String id = "D ";
Country c = em.find(Country.class, id);
i can see afterwards:
c.getId() --> "D" and not "D "
The entitiy is read again and again from the database. The caching does not work for some reason. I guess in the cache the id is existing as "D" and not as "D ".
20130423 09:15:14,495 FINEST query Execute query ReadObjectQuery(name="country" referenceClass=Country )
20130423 09:15:14,498 FINEST connection reconnecting to external connection pool
20130423 09:15:14,498 FINE sql SELECT countryID, countryNAME, countryTELCODE, countryTOPLEVELDOMAIN, countryINTTELPREFIX FROM geo.COUNTRY WHERE (countryID = ?)
bind => [D ]
20130423 09:15:14,508 FINEST query Execute query ReadObjectQuery(name="country" referenceClass=Country )
20130423 09:15:14,508 FINEST connection reconnecting to external connection pool
20130423 09:15:14,508 FINE sql SELECT countryID, countryNAME, countryTELCODE, countryTOPLEVELDOMAIN, countryINTTELPREFIX FROM geo.COUNTRY WHERE (countryID = ?)
bind => [D ]
I tried to set the @Column(length=3) but it has no effect.
Does anybody has an idea why the cache does not work like it should.
Thanks Hasan
By default EclipseLink trims trailing spaces from CHAR fields. This can be disabled.