Приведите пустое поле даты, используя Korma и MySQL.
Используя Korma и MySQL, я пытаюсь выбрать из таблицы с именем posts, есть поле для опубликованной даты, которое по умолчанию равно nil.
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)
Если я пытаюсь выбрать и использовать опубликованное поле, я получаю следующую ошибку:
user => (выберите посты (поля: id: заголовок: контент: статус: создан:опубликован)) Не удалось выполнить запрос с помощью 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)
Если я не использую опубликованное поле, все работает нормально:
user => (выберите сообщения (поля: id: title: content: status: made:author)) [{:id 1,:title "Hello World!",:content "Добро пожаловать в Beats, самый совершенный в мире движок Clojure Beat Engine!",: status true,: созданный #,: автор 1} {:id 2,:title "Hello World! again!",:content "Sayin 't 'gain! Добро пожаловать в Beats, самый совершенный в мире Clojure Beat Engine!",: Статус true,: создан #,: автор 2}]
Как я могу обработать это поле? Я пытался добавить функцию преобразования в свою сущность с помощью простого оператора log, но, похоже, его даже не вызывали.
1 ответ
Если предположить, что Марк Б прав, и причина проблемы в том, что у вас есть запись, опубликованная как 0000-00-00, то вы можете добавить zeroDateTimeBehavior = convertToNull в ключ Korma mysql: db, например:
:db "mydb?zeroDateTimeBehavior=convertToNull"
Теперь JDBC и, следовательно, Korma вернут опубликованный ноль для этой записи:
(select posts (fields :id :published))
;; [{:published nil, :id 1}]
Возможно, вам придется перезапустить реплей, чтобы флаг вступил в силу.
Смотрите также: