2017-02-21 4 views
1

私のspring mvcアプリケーションでは、データベースにdoctorテーブルとuserテーブルがあります。すべての医者はユーザーを持っています。問題は、私が医者に更新しようとすると、医者に属するユーザーが更新されていないことです。この代わりに、更新された医者に属する私のデータベースの新しいユーザーが表示されます。ここでHibernate update one-to-oneは、既存のものを更新するのではなく、新しい子オブジェクトを作成します。

は私の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プラットフォームの初心者です。私は2日で解決策を見つけることができませんでした。私はこのようにそれを行うだろう

おかげで,,

+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); 

} 

は、マージ中、Userエンティティはフェッチされますと、あなたがするsaveOrUpdateを実行するとき、それは利用者を更新代わりに挿入する必要がありますidがそこにいるように。

+0

小さな変化..それは博士managedDr = s.merge(博士)でなければなりません。 –

+0

どうもありがとうございました。どうしてこの前にこれを見たことがないのですか? –

+0

心配ありません。お役に立てて嬉しいです –

関連する問題