2016-11-28 2 views
0

В моем приложении MVC/JPA Spring у меня есть объекты User и Department, определенные в отношении их таблиц базы данных. Как правило, многие пользователи могут принадлежать одному отделу, поэтому у меня есть следующий в моем User ClassСвязывание идентификаторов вложенных объектов весной JPA

@Entity(name = "USER") 
public class User { 

    @Id 
    @Column(name = "Username") 
    private String username; 

    @ManyToOne 
    @JoinColumn(name = "Department") 
    private Department department; 

} 

Когда приходит время, чтобы сохранить новый пользователь, я должен связать пользователь с идентификатором отдела по

User 
username  | BobbySurfs2020 
departmentId | 43 

ли я нужно иметь дополнительное departmentId поле, определенное на моем объекте пользователя только, чтобы сделать эту связь, или я могу каким-то образом использовать встроенный объект Департамент установить этот идентификатор через мой сеттер setDepartment()?

Update/Дополнительная мысль:

Это даже необходимо иметь Department вложенные в User объекте, как я здесь? Я думаю, потребуется больше памяти для хранения Department для каждого пользователя, которого я получаю, чем связать только Department ID. Таким образом, если мне понадобилась информация отдела в любое время, я мог просто просто посмотреть их идентификатор, связанный с пользователем. Мысли?

Спасибо большое!

+0

не просто добавить departmanId в таблице пользователей в БД после этого просто принести departman через имя, а затем установить departman на пользователя и сохранить его также изменить Joincolumn (departman) с joincolumn (offmanid) –

+0

Спасибо @mithatkonuk. Я также думаю, что может потребоваться хранить «Департамент» вообще и использовать идентификатор вместо этого –

+0

Thats из-за отношения orm, вы просто даете декамену, который хранится в db, и вы можете избежать сложного процесса, так или иначе вы также можете использовать id в пользовательский класс, чтобы установить и сохранить его, может быть также, но я предлагаю вам, чтобы этот способ был более крутым. –

ответ

1

Нужно ли иметь дополнительное поле отдела, определенное на моем объекте User, чтобы сделать эту связь.

Нет

Это даже необходимо иметь Департамент вложенных в объект пользователя, как я здесь?

Да. Вы используете объект Объект Relational Mapper так, чтобы его отображали.

В мире MVC вы можете легко справиться с этим с помощью конвертера, который примет идентификатор, переданный из пользовательского интерфейса, и посмотрит на соответствующий объект и установит его в редактируемом объекте.

@Component 
public class StringToDepartmentConverter implements Converter<String, Department> { 

    @Autowired 
    private DepartmentService service; 

    /** 
    *departmentId is the HTTP post param passed in by the framework 
    */ 
    public Department convert(String departmentId) { 
     return service.findDepartment(Integer.parseInt(departmentId)); 
    } 
} 

Регистрация этого с фреймворком:

@Configuration 
@EnableWebMvc 
@ComponentScan(basePackages = { "..." }) 
public class MvcConfiguration extends WebMvcConfigurerAdapter{ 

    //other configuration 

    @Override 
    public void addFormatters(FormatterRegistry formatterRegistry) { 
     formatterRegistry.addConverter(departmentConverter()); 
    } 

    @Bean 
    public StringToDepartmentConverter departmentConverter(){ 
     return new StringToDepartmentConverter(); 
    } 
} 
Смежные вопросы