Java 如何使用Hibernate和JPA注释保存外键值

Java 如何使用Hibernate和JPA注释保存外键值,java,mysql,hibernate,jpa,Java,Mysql,Hibernate,Jpa,我有两个类,一个是用户,另一个是种族。两者都有一对一的关联,种族有一个外键用户id,但问题是我在种族表中的外键列上得到了一个空值。我正在使用jsp页面动态设置这些值 我的映射如下 User Class @OneToOne(cascade = CascadeType.ALL, mappedBy="user") public Ethnicity ethnicity; getter/setter Ethnicity Class @OneToOne(cascade = CascadeType.ALL

我有两个类,一个是用户,另一个是种族。两者都有一对一的关联,种族有一个外键用户id,但问题是我在种族表中的外键列上得到了一个空值。我正在使用jsp页面动态设置这些值

我的映射如下

User Class
@OneToOne(cascade = CascadeType.ALL, mappedBy="user")
public Ethnicity ethnicity;
getter/setter


Ethnicity Class
@OneToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
public User user;
getter/setter
为了检索数据,我使用设置值的同一个jsp页面。下面是我如何检索数据的代码

<c:forEach items="${userList}" var="user">
    <tr>
        <td>${user.userId}</td>
        <td>${user.username}</td>
        <td>${user.password}</td>
        <td>${user.firstName}</td>
        <td>${user.lastName}</td>
        <td>${user.active}</td>
        <td>${user.ethnicity.ethnicityId }</td>
        <td>${user.ethnicity.nationality }</td>
        <td>${user.ethnicity.race }</td>
        <td>${user.ethnicity.region }</td>
        <td>${user.ethnicity.religion }</td>
    </tr>
</c:forEach>
用户服务类扩展了JpaRepository,对于entitymanager,我使用的是maven依赖项。

  • JPA提供程序不会自动处理 基于数据库值的实体
  • 维护关系是应用程序开发人员的责任
  • 应在种族用户之间设置关系,即当您创建了双向关系时,应为用户设置亲缘关系以及为种族设置用户集

     user.setEthnicity(ethnicity);
     ethnicity.setUser(user);
    
这应该行得通


我已经写了很多关于jpa的有用教程

你是怎么坚持的?你确定了关系的两个方面?你是如何找回它们的?@NeilStockton请查看更新的代码。在哪里?你没有发布JPA代码,你没有提到你是如何建立关系并保持关系的。我是一个初学者。你能解释一下你需要哪些代码吗?你把这个问题标记为JPA和Hibernate。JPAAPI将数据放入数据库并检索它。您的问题是数据库中有哪些数据。因此,这应该是非常清楚的,这是所需要的代码(EntityManager等)。我是一个初学者,这是我第一次使用这项技术,我对这一切不太了解。您能告诉我在哪里添加此代码吗?@Bilal请按照答案中提供的链接进行操作。它应该能解决你的问题。如果它仍然不能自由地问。先生,我正在动态地做这一切,我无法理解把代码放在哪里。在我的java编码中,我没有使用entitymanager来实现所有这些。需要帮助。@Bilal,噢!我认为您只使用特定于hibernate的代码,而不是JPA。EntityManager对应于hibernate中的会话。您需要在执行
user.setOmnicious(种族)操作后对用户对象调用save方法
种族.setUser(用户)基本上,您必须从任何一方实现这两种关系。
 user.setEthnicity(ethnicity);
 ethnicity.setUser(user);