java - 简单的 Hibernate 映射问题

标签 java mysql hibernate jpa

我正在尝试完成一个简单的映射,但我遇到了问题。

基本上,我在 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):

Note

User

Test

更新:修复了 Owner/OwnerName 变量命名错误,但我现在收到此错误:错误:

Cannot add or update a child row: a foreign key constraint fails (notes.notes, CONSTRAINT notes_ibfk_1 FOREIGN KEY (Owner) REFERENCES users (username))

Stacktrace .

最佳答案

问题出在 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/

相关文章:

java - 为继承字段添加 Java 注解

image - 如何在 hibernate 中使用图像类型?

mysql - TimeStampToken 存储在 MySQL 还是 Oracle 中?

php - MySQL插入语句不会插入?

php - 禁用购物车中的结账按钮 - php

java - 以最快的方式将大量数据从vertcicadb表批量加载到mysql表

oracle - 有没有办法让 Hibernate 使用文字值而不是绑定(bind)变量?

java - Pair 类 getPair 方法

Java:如何在字符串列表中找到最可能的字符串?

java - 带有网络驱动器的类路径来运行Java程序