Могут столбцы таблицы с Внешним ключом быть ПУСТЫМИ?

Вы также можете десериализовать этот Json как Map с readValue(..), если readTree(..) не является обязательным требованием, например:

@Test
public void test() throws Exception {
    ObjectMapper jsonMapper = new ObjectMapper();
    // JSON contains this kind of a structure
    Map<String, List<Map<String, Object>>> map = jsonMapper
                // test.json should be in the same package as test and contain 
                // your Json
                .readValue(getClass().getResourceAsStream("test.json"), Map.class);
    // Result of this loggion below
    map.entrySet().forEach(entry -> {
        log.info("key: {}", entry.getKey());
        entry.getValue().forEach(person -> {
            log.info(" {} attending: {}", person.get("name"), person.get("attending"));
        });
    });
}

Журнал должен иметь вид:

[ 1111] ключ: первый
законопроект присутствующий: ложный
фред присутствующий: ложный
майк присутствующий: ложный
ключ: второй
Алан присутствовал: ложь

206
задан Oreo 27 November 2018 в 02:06
поделиться

3 ответа

Да, вы можете применить ограничение, только если значение не равно NULL. Это можно легко проверить на следующем примере:

CREATE DATABASE t;
USE t;

CREATE TABLE parent (id INT NOT NULL,
                     PRIMARY KEY (id)
) ENGINE=INNODB;

CREATE TABLE child (id INT NULL, 
                    parent_id INT NULL,
                    FOREIGN KEY (parent_id) REFERENCES parent(id)
) ENGINE=INNODB;


INSERT INTO child (id, parent_id) VALUES (1, NULL);
-- Query OK, 1 row affected (0.01 sec)


INSERT INTO child (id, parent_id) VALUES (2, 1);

-- ERROR 1452 (23000): Cannot add or update a child row: a foreign key 
-- constraint fails (`t/child`, CONSTRAINT `child_ibfk_1` FOREIGN KEY
-- (`parent_id`) REFERENCES `parent` (`id`))

Первая вставка пройдет, потому что мы вставляем NULL в parent_id . Вторая вставка не удалась из-за ограничения внешнего ключа, поскольку мы пытались вставить значение, которого нет в родительской таблице .

212
ответ дан 23 November 2019 в 04:50
поделиться

Да, значение может быть НУЛЕВЫМ, но необходимо быть явными. Я испытал эту ту же ситуацию прежде, и легко забыть, ПОЧЕМУ это происходит, и таким образом, требуется немного для запоминания что потребности быть сделанным.

, Если отправленные данные брошены или интерпретированы как пустая строка, они перестанут работать. Однако путем явной установки значения в NULL при ВСТАВКЕ или ОБНОВЛЕНИИ, Вы хороши для движения.

, Но это интересно запрограммировать, не так ли? Создание наших собственных проблем и затем фиксация их!Удачи!

1
ответ дан 23 November 2019 в 04:50
поделиться

Да, это будет работать так, как вы ожидаете. К сожалению, я, кажется, не могу найти явное утверждение этого в руководстве по MySQL.

Внешние ключи означают, что значение должно существовать в другой таблице. NULL означает отсутствие значения, поэтому, когда вы устанавливаете столбец в NULL, не имеет смысла пытаться накладывать на него ограничения.

4
ответ дан 23 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: