Я пытаюсь сделать простое сопоставление, но у меня проблемы.
По сути, у меня в Mysql есть таблица User с одним столбцом, который называется varchar(255)
с именем пользователя и является первичным ключом.
У меня есть еще одна таблица, называемая заметками, которая имеет первичный автоматически генерируемый ключ, который представляет собой int
, столбец date
, varchar
имя и столбцы содержимого и varchar(255)
, называемый владельцем, который долженсодержать имя пользователя
Это помечено как внешний ключ, ссылающийся на Users (имя пользователя).
Код для получения фабрики сеанса следующий:
private static SessionFactory createSessionFactory() {
SessionFactory sessionFactory;
Configuration configuration = new Configuration();
configuration.configure("hibernate.cfg.xml");
configuration.addAnnotatedClass(Note.class);
configuration.addAnnotatedClass(User.class);
StandardServiceRegistry serviceRegistry = new
StandardServiceRegistryBuilder().applySettings(
configuration.getProperties()).build();
sessionFactory = configuration.buildSessionFactory(serviceRegistry);
return sessionFactory;
}
Это прекрасно работает без строкиэто добавляет аннотированный класс «Примечание», так что это, вероятно, проблема с этим классом.Ошибка следующая:
Не удалось получить конструктор для org.hibernate.persister.entity.SingleTableEntityPersister org.hibernate.MappingException
Полный трассировка стека :
Полные уроки доступны здесь:
Примечание
Пользователь
Тест
ОБНОВЛЕНИЕ: исправлено неправильное присвоение имени переменной Owner / OwnerName, однако теперь я получаю эту ошибку: ОШИБКА:
Невозможно добавить или обновить дочернюю строку: сбой ограничения внешнего ключа (notes
. notes
,ОГРАНИЧЕНИЕ notes_ibfk_1
ИНОСТРАННЫЙ КЛЮЧ (Owner
) ССЫЛКИ users
(username
))
Stacktrace .