NejakaEntita.createCriteria().list() {
resultTransformer Criteria.DISTINCT_ROOT_ENTITY // this is it
}
Good to know. Význam té konstrukce jsem zatím nezkoumal, na to snad bude čas někdy jindy. Hlavní je, že funguje.
Blog určený spíše pro osobní použití. Zaznamenávám sem problémy, se kterými se potýkám v práci a které mi trvaly trošku déle, než jsem je vyřešil. Tak abych příště dělal rychleji :) Nyní také o Austrálii.
NejakaEntita.createCriteria().list() {
resultTransformer Criteria.DISTINCT_ROOT_ENTITY // this is it
}
create procedure generaterc()Poznámka pod čarou:
begin
declare _rc varchar(255); --tady jsem měl chybu
declare _id int;
set _id = 1;
while _id < ((select count(*) from patient) + 1) do
begin
set _rc = cast(FLOOR(1000000000 + (RAND() * 8999999999)) AS char);
if not exists(select * from patient where patient.rc = _rc) then
update patient set rc=_rc where id=_id;
set _id=_id+1;
end if;
end;
end while;
end
@font-face {Takhle se vše zobrazovalo správně. Problém byl ale v tom, že odkaz na font byl funkční jen pro Windows. OK, tak prostě se ten soubor s fontem zkopíroval do web-app/font složky (složka s HTML a CSS a obrázky, která se nekompiluje). Komplikací poté ale bylo, že nešlo na ten soubor odkazovat:
src: url(file:c:/windows/fonts/arialuni.ttf);
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
@font-face {
src: url(file:${czechFontPath});
-fs-pdf-font-embed: embed;
-fs-pdf-font-encoding: Identity-H;
}
České čárky a háčky,to je občas velké zlo v kódování. A ještě větší zlo je,když toto kódování nevíte a ani neumíte zjistit. V současném projektu je 1 z úkolů migrace databáze. Jenže databáze starého systému,který je starý a k tomu ještě desktopový, že jsem tu databázi viděl poprvé (slyšel podruhé). Jednalo se o databázi foxpro a hromada souborů s koncovkou .dbf.
Myslel jsem, že vše proběhne bez problému. Jako první jsem stáhl z netu nějaké programy pro zobrazování,ale bohužel žádná neuměla české znaky přečíst (např. č). Pak jsem koukal i přímo po java knihovnách. Nejlepší byl tento: http://www.hxtt.com/orderdbf.html, akorát stál prachy,takže nic pro studenty. Trial verze umožňovala zobrazit jen 1000 prvních řádků... Ale plusem byl ten,že jsem konečně zjistil kódování dbf souboru (Cp1250).
Po delším hledání jsem narazil na program od českých autorů: http://www.pspad.com/cz/dbfview.htm. Ten funguje skvěle,doporučuji. Migrace samotné provedeme konverzí na csv a pak načtení csv do databáze.
def messageSourceGrails do této proměnné provede automaticky DI. Pak lze pomocí této proměnné získat poměrně snadno texty z message.properties:
messageSource.getMessage("some.entity.label", null, "", LocaleContextHolder.getLocale())getMessage() metoda má několik variant (přetěžovaných metod). Tu, kterou jsem použil, bere 4 parametry - první String je kód z message.properties souboru, druhý jsou možné argumenty v textu (žádné nemám), třetí je defaultní text a čtvrtý je Locale instance (což je zde ten, který má klient). Více zde.
public void createMySQLDump() {Tento dump vytvoří backup pro všechny dostupné databáze daného uživatele. Co jsem nepochopil, tak nefunguje mysqldump tímto způsobem:
String username = grailsApplication.config.dataSource.username
String password = grailsApplication.config.dataSource.password
"mysqldump --user=${username} --password=${password} --all-databases --result-file=mysql-dump-${new Date().format("ddMMyyyy")}.sql".execute()
}
"mysqldump --user= ${username} --password= ${password} --all-databases > C:\\mysql-dump-${new Date().time}.sql"Jsem pak četl na jednom blogu, že znak ">" nelze použít, ale Grails to nijak neoznámí. Takže bacha.
public long getNextInvoiceNumber() {
def sql = new Sql(dataSource)
def firstRow = sql.firstRow('SHOW TABLE STATUS WHERE Name=\'invoice\'')
def nextInvoiceNumber = Long.parseLong(firstRow.Auto_increment.toString())
return nextInvoiceNumber
}