2017-02-21 88 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

不用擔心。很高興我能幫上忙 –

相關問題