gpt4 book ai didi

java - 在引用管理表 hibernate 的用户表上插入值 1

转载 作者:行者123 更新时间:2023-11-29 20:42:01 25 4
gpt4 key购买 nike

我试图在用户表上保存值 1,该表引用了用户表上具有外键 adminId 的管理表

在我的 User.java 中我有这个

@OneToOne
@JoinColumn(name = "adminId")
Admin admin;

这是上面映射到引用管理表的 user.java 的 getter 和 setter

public Admin getAdmins() {
return admin;
}

public void setAdmin(Admin id) {

this.admin = id;
}

在 SpringBoot 应用程序的 DAO 类中,我像这样持久保存用户表

public void save(User user) {
Admin admin = (Admin)getSession().createQuery("from Admin a where a.adminId = ?")
.setParameter(0, 1);
user.setAdmin(admin);

getSession().save(user);
}

编辑:这就是我试图拯救用户的方式

public void save(User user) {
long id = 1 ;

Admin admin = (Admin)getSession().createQuery("from Admin a where a.adminId = ?").setParameter(0, 1).list().get(0);
user.setAdminz(admin);

getSession().save(user);
}

这是我用于保存操作的 Controller 代码

@RequestMapping(value = "/create-user", method = RequestMethod.POST)
public ModelAndView createUser(HttpServletRequest request,
HttpServletResponse response,
@RequestParam String name,
@RequestParam String email) {
try {
// create new user object
User user = new User();
user.setName(name);
user.setEmail(email);
user.setTimestamp(new Date().getTime());

// save user in db (if new)
if (_userDao.getByEmail(email) == null) {
_userDao.save(user);
}

当我尝试保存时出现此错误

com.xxx.MainController       [0;39m [2m:[0;39m Exception in creating user:

我已将映射修改为不接受可为 null

@OneToOne
@JoinColumn(name = "adminId",nullable = false)
Admin admin;

如果我删除 nullable = false 注释,NULL 值将保存到用户表的 adminId 字段中。

请问我做错了什么?请协助。

最佳答案

您必须执行查询

Admin admin = (Admin)getSession().createQuery("from Admin a where a.adminId = ?").setParameter(0, 1);

您的 IDE 应该警告您有关此行的信息,因为只要您没有将 Hibernate Query 实现到您的 Admin 类,您就无法将其强制转换为您的 Admin 类型,如果您这样做了,那就大错特错了...

此代码不是获取单个元素的最佳实践,但您必须使用 list() 方法执行查询。并从列表中获取您的元素。

Admin admin = (Admin)getSession().createQuery("from Admin a where a.adminId = ?").setParameter(0, 1).list().get(0)
//Warning! If list is empty, there will be an error.

如果您想使用 hibernate 从数据库中选择单个元素(并使用实体进行映射),我建议您使用此代码。

Admin admin = getSession().get(Admin.class, 1); 

关于java - 在引用管理表 hibernate 的用户表上插入值 1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38588879/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com