最近在使用Hibernate的时候遇到了一个诡异的bug,花了将近一个小时的debug时间,终于发现根源是table的column name刚好是SQL keyword (例如id, mode之类的名字)。Hibernate在自动生成的SQL语句中是不会自动加上标准的单引号(`)的,这导致我的数据库MySQL引擎在解释SQL语句的时候抛出了异常……
经过一番google,最终采用了一个解决方案——在hbm.xml映射文件中为该字段指定使用quote,例如:
<property name="mode" column="`mod`">
这样就等于强制使用了单引号的语法。
有意思的是,发现NHibernate的bug list中就有关于是否要自动使用quote的相当激烈的讨论。个人认为如果在hibernate configuration中可以通过某个property指定所有的SQL语句都要使用quote就很方便了。
经过一番google,最终采用了一个解决方案——在hbm.xml映射文件中为该字段指定使用quote,例如:
<property name="mode" column="`mod`">
这样就等于强制使用了单引号的语法。
有意思的是,发现NHibernate的bug list中就有关于是否要自动使用quote的相当激烈的讨论。个人认为如果在hibernate configuration中可以通过某个property指定所有的SQL语句都要使用quote就很方便了。
评论