2017-02-21 89 views
1

在我的spring mvc应用程序中,我在数据库中有医生和用户表。每个医生都有一个用户。问题是当我尝试更新医生时,属于医生的用户没有更新。与此相反,我在我的数据库中看到属于更新医生的新用户。Hibernate更新一对一创建新的子对象而不是更新现有的对象

这里是我的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> 

这里是控制器保存方法:

@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平台的初学者。两天内我找不到解决方案。

谢谢,,

+0

你能告诉我们保存方法吗? –

+0

我已经在更新过程中包含这些方法 –

+0

,医生和用户是否设置了id? –

回答

1

我会做这样的:现在

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

} 

,合并过程中,用户实体将进账,当你执行saveOrUpdate,应该更新用户而不是插入的因为id会在那里。

+0

小改变..它应该是医生managedDr = s.merge(dr); –

+0

非常感谢你,我以前从来没有见过这样的东西 –

+0

不用担心。很高兴我能帮上忙 –

相关问题