使用Korma和MySQL我试图从名为posts的表中进行选择,默认情况下,发布日期的字段为零。
mysql> describe posts;
+-----------+--------------+------+-----+---------------------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+--------------+------+-----+---------------------+-------+
| id | int(11) | NO | PRI | 0 | |
| title | varchar(250) | YES | | NULL | |
| content | text | YES | | NULL | |
| status | tinyint(1) | YES | | 0 | |
| created | timestamp | NO | | CURRENT_TIMESTAMP | |
| published | timestamp | NO | | 0000-00-00 00:00:00 | |
| author | int(11) | NO | MUL | NULL | |
+-----------+--------------+------+-----+---------------------+-------+
7 rows in set (0.02 sec)
如果我尝试选择并使用已发布的字段,我会收到以下错误:
用户=> (选择帖子(字段:id:title:content:status:created :已发布))无法使用SQL执行查询:SELECT posts.id, posts.title,posts.content,posts.status,posts.created, posts.published FROM posts :: [] ClassCastException java.lang.RuntimeException无法强制转换为java.sql.SQLException clojure.java.jdbc / print-sql-exception(jdbc.clj:350)
如果我不使用已发布的字段,一切正常:
用户=> (选择帖子(字段:id:title:content:status:created :作者))[{:id 1,:title“Hello World!”,:content“欢迎来到 Beats,世界上最先进的Clojure Beat Engine!“,:状态 true ,: created#,:author 1} {:id 2, :标题“Hello World!,再次!”,:内容“Sayin't'获得!欢迎 to Beats,世界上最先进的Clojure Beat Engine!“, :status true,:created#,:author 2}]
我该如何处理这个字段?我试图通过一个简单的日志语句向我的实体添加一个转换函数,但它似乎甚至没有被调用。
答案 0 :(得分:2)
假设Marc B是正确的,问题的原因是你有一个发布的例子,那么你可以将zeroDateTimeBehavior = convertToNull添加到你的Korma mysql:db key,例如:
:db "mydb?zeroDateTimeBehavior=convertToNull"
现在,JDBC和Korma将为该记录返回已发布的nil:
(select posts (fields :id :published))
;; [{:published nil, :id 1}]
您可能必须重新启动repl才能使该标志生效。
另见: