繁体   English   中英

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

[英]How to save foreign key value using Hibernate and JPA annotation

我有两个班级,一个是用户,另一个是种族。 两者都有一对一的关联,种族有一个外键user_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>

这是添加用户的功能之一。

@Service
@Transactional(readOnly = true)
public class UserServiceImp implements UserService {
@Autowired
private UserRepository userRepository;

@Autowired
private Mapper mapper; 

@Transactional
public void add(UserDTO userDTO) {
    User user = mapper.map(userDTO, User.class);
    userRepository.save(user);
 }
}

用户服务类扩展了JpaRepository,对于Entitymanager,我正在使用Maven依赖项。

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

      user.setEthnicity(ethnicity); ethnicity.setUser(user); 

这应该工作。

我已经在www.thejavageek.com上撰写了有关jpa关系的文章 ,您可以其中找到有关jpa的许多有用的教程。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM