2017-02-14 9 views
-2

Я разрабатываю веб-приложение, используя весну и спящий режим. Я использую одно к одному сопоставление между двумя сотрудниками таблиц и PersonelDetails.Spring + hibernate one to one mapping

ниже мои боб классы

======================= Сотрудник ============= ========================

@Entity 
@Table(name="employee") 
public class Employee { 
    @Id 
    @Column 
    @GeneratedValue 
    private int empid; 
    @Column 
    private String firstName; 
    @Column 
    private String lastName; 
    @Column 
    private String email; 
    @Column 
    private String password; 
    @Column 
    private boolean isAdmin; 

    @Column 
    private boolean isActive; 

    @Column 
    private boolean isLocked; 
//getter setters 

=================== = personalDetails класс ====================

@Entity 
@Table(name="PersonalDetails") 
public class PersonalDetails { 
    @Column 
    @Id 
    private int empid; 
    @Column 
    private String personalEmail; 
    @Column 
    private String mob; 
    @Column 
    private String permenantAdress; 
    @Column 
    private String currentAddress; 
    @Column 
    private String gender; 
    @Column 
    private String maritialStatus; 

    @MapsId 
    @OneToOne(cascade = CascadeType.ALL) 
    @JoinColumn(name = "empid", referencedColumnName = "empid") 
    @ForeignKey(name="empid") 
    private Employee employee; 

//getter setters 

В моей таблице приложения сотрудника заполняется пользователем администратора при создании нового сотрудника после этого employyee сам заполнить personalDetails таблица по имени пользователя на его счету ed by Admin)

Теперь, когда я пытаюсь отправить компонент личной информации в спящий режим сначала, я должен получить компонент-сотрудник из таблицы employee, затем вызовите метод setEmployee поверх класса personalDetails и сохраните компонент bean-компонента в personalDetails и отправьте на спящий режим для сохранение в базе данных.

Таким образом, получая bean-компонент из базы данных и снова отправляя обратно через personalDetails, bean приводит к проблеме с производительностью.

Может ли кто-нибудь помочь здесь, чтобы уточнить, сохраняя данные в дочерней таблице (PersonalDetails), действительно ли обязательно передать родительский объект (Employee)?

======================= код для хранения personalDetails ===============

@RequestMapping(value="addpersonal") 
    public ModelAndView addPersonalDetails(@ModelAttribute("personalDetails") PersonalDetails personalDetails) { 
     //personalDetails.setEmpid(1); 
     personalDetails.setCurrentAddress("niljyoti"); 
     personalDetails.setMob("9405715872"); 
     personalDetails.setPermenantAdress("address"); 
     Employee e = empService.getEmployeebyUserName(uname); 
     personalDetails.setEmployee(e); 
     personalDetailsService.addPersonalDetails(personalDetails); 
     return new ModelAndView("home"); 

    } 
+2

Какого код вызывают какую проблему производительности? Опубликуйте код, а не описывайте его. –

ответ

0

On read:

Вы можете изменить стратегию извлечения, если вы беспокоитесь. На основе спецификации JPA, тип выборки по умолчанию для @OneToOne - EAGER.

Установив fetch = FetchType.LAZY, вместо реального объекта PersonalDetails возвращается объект подкласса, ведущего себя как прокси. Следовательно, выбор из таблицы employee начинается только после вызова getEmployee.

На записи:

Вы должны указать связь между объектами, в вашей модели, единственным способом является employee поле. Тем не менее, вы можете указать mappedBy см ответа на этот вопрос:

Java: Hibernate @OneToOne mapping