gpt4 book ai didi

java - Hibernate更新一对一创建新的子对象而不是更新现有的子对象

转载 作者:行者123 更新时间:2023-11-30 06:53:06 24 4
gpt4 key购买 nike

在我的 spring mvc 应用程序中,我的数据库中有医生和用户表。每个医生都有一个用户。问题是当我尝试更新医生时,属于医生的用户没有被更新。相反,我在数据库中看到一个属于更新后的医生的新用户。

这是我的 Doctor.java 实体:

@Entity
@Table(name="doctor")
public class Doctor {

@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;


@Column(name="name")
private String name;


@Column(name="tel")
private String tel;

@Column(name="email")
@Email
private String email;

private transient String ConfirmPassword;

@OneToOne(fetch = FetchType.EAGER, cascade = CascadeType.ALL)
@JoinColumn(name = "user_id")
private User user;

//getter and setters....

这是我的 User.java 实体

@Entity
@Table(name="user")
public class User {

@Id
@Column(name="id")
@GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;


@Column(name="username")
private String username;


@Column(name="password")
private String password;


//getters and setters...
}

这是我的表格:

<form:form action="save" modelAttribute="doctor" method="post">

<form:errors path="name"></form:errors>
<form:input path="name" placeholder="Doktor İsmi" class="form-control" />

<form:input path="user.username" placeholder="Kullanıcı Adı" class="form-control" />

<form:input type="email" path="email" placeholder="Email" class="form-control" />

<form:input path="tel" placeholder="Telefon" class="form-control" />

<form:input type="password" path="user.password" placeholder="Şifre" class="form-control" />

<form:hidden path="id" />/>
<input type="submit" value="Doktor Kaydet" />
</form:form>

这是 Controller 保存方法:

@PostMapping(value="/save")
public String save(@Valid Doctor dr, @Valid User usr, BindingResult bindingResult){

doctorValidator.validate(dr, bindingResult);
if (bindingResult.hasErrors()) {
return "admin/doctor-form";
}
else{
dr.getUser().setIs_doctor(1);
doctorService.save(dr);
return "redirect:list";
}
}

最后是 DoctorDAO。保存方法,我没有给用户额外的保存操作,因为它应该通过医生保存。

public void save(Doctor dr) {
Session s = sessionFactory.getCurrentSession();
s.saveOrUpdate("doctor", dr);

}

我尝试阅读引用文献,阅读示例等等。我是 Hibernate 和 JEE 平台的初学者。两天没找到解决办法。

谢谢,,

最佳答案

我会这样做:

public void save(Doctor dr) {
Session s = sessionFactory.getCurrentSession();
Doctor managedDr = s.merge(dr);
managedDr.getUser().setIs_doctor(1);
s.saveOrUpdate("doctor", managedDr);

}

现在,在合并期间,将获取 User 实体,并且当您执行 saveOrUpdate 时,它​​应该更新用户而不是插入,因为 id 将在那里。

关于java - Hibernate更新一对一创建新的子对象而不是更新现有的子对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42366492/

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