Многие объяснения уже присутствуют, чтобы объяснить, как это происходит и как это исправить, но вы также должны следовать рекомендациям, чтобы избежать NullPointerException
вообще.
См. также: A хороший список лучших практик
Я бы добавил, очень важно, хорошо использовать модификатор final
. Использование "окончательной" модификатор, когда это применимо в Java
Сводка:
final
для обеспечения хорошей инициализации. @NotNull
и @Nullable
if("knownObject".equals(unknownObject)
valueOf()
поверх toString (). StringUtils
StringUtils.isEmpty(null)
. Я получил эту ошибку при редактировании моего файла Product.orm.yml.
Я добавил новое отношение manyToMany с сущностью Category и допустил ошибку в строке joinTable:
manyToMany:
categories:
targetEntity: Acme\ProductBundle\Entity\Category
inversedBy: products
joinTable:
name: Product # My mistake: joinTable should be something like ProductCategory
[...]
Действительно, это глупая ошибка, которой я все равно поделюсь.
Если вы можете, вы можете сделать это, как это работает для меня:
Удалить всю базу данных:
app/console doctrine:schema:drop --force --full-database
Запустить все миграции БД:
app/console doctrine:migrations:migrate
У меня была эта проблема с отношением «Один ко многим, однонаправленный с таблицей соединения» , как ( см. Doctrine Doc ). Я не нашел такого случая ошибки с этим типом отношения через Интернет или через стековый поток, поэтому я выкладываю здесь свое решение, чтобы позволить другим помочь с той же проблемой.
Что вызвало эту проблему:
/**
* @ORM\ManyToMany(targetEntity="Category")
* @ORM\JoinTable(name="category_child",
* joinColumns={@JoinColumn(name="category_id", referencedColumnName="id")},
* inverseJoinColumns={@JoinColumn(name="category_child_id", referencedColumnName="id")}
* )
*/
public $children;
@ORM\JoinTable(name="category_child"
вызвало, что доктрина хочет создать эту таблицу снова. Один раз из-за уже существующего объекта Category_Child, а затем выражения @ORM\JoinTable
, которое указывает на ту же таблицу. Решение состояло в том, чтобы удалить сущность Category_Child, которая была создана из реверс-инжиниринга. Если вы использовали сущность Category_Child в некоторых запросах $ em, вы должны выбрать эти данные в обратном направлении. Например. Через родителя, который хранит эти дочерние данные в ArrayCollection, или через DBAL.