Question: I want to use embedded HSQLDB file-based tables in my production system, but I heard that it had some issues with data corruption before. So my question is - are new versions of it (2.2.8) vulnerable to data corruption issues, for example when the machine lost power or java process was killed? And are there some configuration options that would help to avoid it?

Answer: 
HSQLDB is designed to recover the database after a machine or java process crash. 

Over the years, persistence has been improved. Currently there is no known issue. With the default settings, in case of a crash, you may lose only the changes made to the database in the last half second. And you can reduce this to zero if you wish.

In any case it is a good idea to use the built-in database backup features for added safety. HSQLDB relies on the JVM fsync() and other methods which interact with the OS. These are generally reliable, but might show a glitch at some point.
Yes, hsqldb **may** corrupt data even without suddenly dying process. Be prepared to build an automatic backup/recovery system and sometimes tools to fix corrupted data.

My experiences of HSQL upsies:

* Non unique values in a column set as unique. (hsql 1.8).
* Corrupted all non-ascii characters in all varchar columns (hsql 2. something if memory serves).
* Corrupted all values in all timestamp columns. (latests hsql)

That said, **it is quite nice database most of the time**. I you are babysitting just one or two instances, you are not very likely to encounter corruption issues.