<HTML dir=ltr><HEAD>
<META http-equiv=Content-Type content="text/html; charset=unicode">
<META content="MSHTML 6.00.2800.1597" name=GENERATOR></HEAD>
<BODY>
<DIV><FONT face=Arial color=#000000 size=2>(since the mod did not approve my prevoius message, neither did Steve reply, I subscribed and send it again)<BR>(I bet 5 seconds after I push SEND, the moderator will approve my pending message and we will have two copies...)</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>Hi!</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>I had a problem with HSQL and hibernate, which boils down to this line<BR>in org.hibernate.dialect.HSQLDialect :<BR>public String[] getCreateSequenceStrings(String sequenceName) {<BR>&nbsp; return new String[] {<BR>&nbsp;&nbsp;&nbsp; "create table dual_" + sequenceName + " (zero integer)", // this one<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "insert into dual_" + sequenceName + " values (0)", // and also this one<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "create sequence " + sequenceName + " start with 1"<BR>&nbsp; };<BR>&nbsp;}</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>If the mapping file has something like this :</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>&lt;id name="id" type="long" column="ID"&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;generator class="sequence"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;param name="sequence"&gt;<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; seq_FOR_MY_TABLE<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;/param&gt;<BR>&nbsp;&nbsp;&nbsp; &lt;/generator&gt;<BR>&lt;/id&gt;</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>then the concatenation " ... dual_" + sequenceName will produce a name with a space inbetween,<BR>which will break both hbm2ddl schema export and regular DML (when persisting the object):</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>create table dual_ seq_FOR_MY_TABLE&nbsp; (zero integer)<BR>Unexpected token SEQ_FOR_MY_TABLE, requires ( in statement [create table dual_ seq_OFFER_MEMBER_OFFERS_ID]<BR>insert into dual_ seq_FOR_MY_TABLE&nbsp; values (0)<BR>Unsuccessful: insert into dual_ seq_FOR_MY_TABLE values (0)<BR>...<BR>Hibernate: select next value for&nbsp; seq_FOR_MY_TABLE&nbsp; from dual_ seq_FOR_MY_TABLE&nbsp; <BR>SQL Error: -22, SQLState: S0002<BR>Table not found in statement [select next value for&nbsp; seq_FOR_MY_TABLE from dual_ seq_FOR_MY_TABLE]</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>the second error comes from getSequenceNextValString(String sequenceName) {<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return "select next value for " + sequenceName + " from dual_" + sequenceName;<BR>&nbsp;&nbsp;&nbsp; }</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>I see 3 solutions: </FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>&nbsp;- declare blank characters in &lt;param name="sequence"&gt; as illegal and be done with it :-(</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>&nbsp;- trim blank characters from the sequenceName argument in method<BR>&nbsp;&nbsp; org.hibernate.dialect.HSQLDialect.getCreateSequenceStrings(String) (and others)<BR>&nbsp;&nbsp; or maybe before, when it is read from Configuration, in org.hibernate.id.SequenceGenerator.configure</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>&nbsp;- do not create a table for each sequence. As I see it they are not really used, just needed as a dummy<BR>&nbsp;&nbsp; table for the "SELECT NEXT VALUE FOR sequenceName FROM ..." statement.<BR>&nbsp;&nbsp; A single table could be used for all sequences. Some "MY_COMMON_DUAL" thing.</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>Regards,<BR>David Balazic</FONT></DIV>
<DIV><FONT face=Arial color=#000000 size=2>PS: Sorry if OutLook introduced any formatting nonsense; I use the webmail<BR>version and it can't do plain text :-(</FONT></DIV></BODY></HTML>