我正在尝试完成一个简单的映射,但我遇到了问题。
基本上,我在 Mysql 中拥有的是一个 User 表,其中只有一列是名为 Username 的 varchar(255)
,它是主键。
我还有一个名为 notes 的表,它有一个主要的自动生成键,它是一个 int
,一个 date
列,varchar
名称和内容列以及一个名为 owner 的 varchar(255)
,其中应包含用户的用户名。
这被标记为引用用户(用户名)的外键。
获取 session 工厂的代码是这样的:
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;
}
如果没有添加带注释的类“Note”的行,这可以正常工作,因此它可能是该类的问题。错误是这样的:
无法获取构造函数 org.hibernate.persister.entity.SingleTableEntityPersister org.hibernate.MappingException
完整 stacktrace :
这里有完整的类(class):
更新:修复了 Owner/OwnerName 变量命名错误,但我现在收到此错误:错误:
Cannot add or update a child row: a foreign key constraint fails (
notes
.notes
, CONSTRAINTnotes_ibfk_1
FOREIGN KEY (Owner
) REFERENCESusers
(username
))
最佳答案
问题出在 Note 类中。 对于变量所有者,setter 方法名称不合适。 而不是
public void setOwnerName(String u) {
this.owner = u;
}
应该是
public void setOwner(String u) {
this.owner = u;
}
这应该可以解决问题。
关于java - 简单的 Hibernate 映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55193395/