2017-02-21 12 views
1

В моем приложении mvc весны у меня есть таблица врача и пользователя в базе данных. У каждого врача есть пользователь. Проблема в том, что когда я пытаюсь обновить врача, пользователь, который принадлежит к врачу, не обновляется. Вместо этого я вижу нового пользователя в моей базе данных, который принадлежит обновленному врачу.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. Я не мог найти решение через два дня.

Спасибо ,,

+0

Вы можете показать нам сам метод сохранения? –

+0

Я включил эти методы сейчас –

+0

во время обновления, установлен ли у врача и пользователя идентификатор? –

ответ

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, он должен обновить пользователя вместо вставки поскольку идентификатор будет там.

+0

небольшое изменение .. он должен быть Доктором управляемымDr = s.merge (dr); –

+0

Большое вам спасибо, почему я никогда не видел этого раньше? –

+0

Не беспокойтесь. Рад, что смог помочь –

Смежные вопросы