HibernateTemplate nedokáže v případě oraclu najít "nezarovnaný" string.

"Pírko, Jiří Mikulášek" pirko.pirko na seznam.cz
Úterý Leden 24 08:42:43 CET 2006


Jiří Mareš napsal(a):

>
> Kdyz jsem fungoval na informixu SE, ktery nemel varchar ale jenom 
> char, pak jsem mel udelany vlastni data type, ktery to osetroval a nez 
> string predal dal, tak ho oriznul.
>
> Vyhledaval jsem pomoci HQL a vse fungovalo jak ma, takze mozna bude 
> problem v tom Template (nepouzivam). Podle me se DB musi typy 
> pretypovat na stejne, aby je mohla porovnat a to znamena, ze by si 
> mela zprava doplnit mezery i u toho parametru ...

jojo přesně tohle bych očekával, ale neděje se to :-(

>
>
> Pírko, Jiří Mikulášek wrote:
>
>>
>> všem díky za rady. zkusím to ještě upřesnit: Jde o typ CHAR(8), právě 
>> mirgujeme z informixu na oracle. Na informixu tento kod bez problemu 
>> fungoval. Taky jde o to ze to tim padem nemusi byt jediny 
>> problematicky misto a db je dost rozsahlá na to abych všechny CHARy 
>> hned kopal do VARCHARu. Chi nejdřív najít jiný řešení. Samozřejmě, že 
>> když to ručně zarovnám tak to funguje, ale nepřijde mi to systémový 
>> co když zas budu někam migrovat? Myslím že tohle by mělo být nějak 
>> oštřený ve springu/hibernate případně v mapování. Jen nevím jak to 
>> "zapnout". Taky mi přišlo zajímavý že JdbcTemplate ve stejýnch 
>> případech (tzn použití ve WHERE) nemá problém a v pohodě to najde. 
>> Kdežto přes hibernate se vrátí list a snulovou délkou.
>> Takže přesná otázka zní: Ví někdo jak problém řešit např. pomocí 
>> konfigurace nebo zásahu do mapování?
>>
>> díky
>>
>> Tomas Vojtech napsal(a):
>>
>>> nevim jestli chapu otazku spravne, ale predpokladam ze ten login v 
>>> db je bez white spacu na zacatku a konci, potom by melo stacit 
>>> pouzit trim na ten string melo by to chodit, pokud ne tak me napada 
>>> ze je objekt User spatne namapovany, a asi bych misto char pouzil 
>>> varchar2, mohlo by to byt zpusobeno fixni velikosti sloupce v db, 
>>> pouzivam varchar2 a nikdy se mi to nestalo
>>>
>>> Tomas Vojtech
>>>
>>> Jiří Mikulášek napsal(a):
>>>
>>>> Hezký den všem,
>>>> mám následující kód s využitím Springu:
>>>>
>>>> public User getUserByLogin(String login) {
>>>>  String queryString = "from " + User.class.getName() +  " as user 
>>>> where user.login = ?";
>>>>  HibernateTemplate temp = getHibernateTemplate();        List list 
>>>> = temp.find(queryString, login);
>>>>  return (User) list.get(0);
>>>> }
>>>>
>>>> problém je v tom že vrácený list je prázdný, ačkoliv "login" v db 
>>>> jistojistě existuje. Jde o typ CHAR v Oracle10g.
>>>> V případě použití čistého Jdbc anebo JdbcTemplate ze springu vše 
>>>> funguje jak má. Přes HiebrnateTemplate to funguje pouze pokud 
>>>> string nejdřív zrovnám na délku co mám v db mezerami. Ví někdo jak 
>>>> Hibernatu říct abyt o dělal správně?.
>>>> Zkoušel jsem fixedString="true" na driver properties, ale bez 
>>>> výsledku. Naopka s fixedString="false" nefunguje ani JdbcTemplate 
>>>> (ale čísté jdbc stále ano).
>>>>
>>>> díky za každý tip
>>>>
>>>> Jirka Mikulášek
>>>>
>>>
>>
>>
>


-- 
	Bc. Jiří Mikulášek
E-mail: pirko.pirko na seznam.cz || pirko.jm na centrum.cz
Tel:	+420 721 571 280
ICQ# 	330718616
Skype: 	pirkojm
web: 	http://www.fi.muni.cz/~xmikula2





Další informace o konferenci Konference