Правильный способ доступа к ассоциации вновь вставленного объекта с MyBatis

#java #mybatis

#java #mybatis

Вопрос:

Я использую MyBatis 3.4.6.

Допустим, у меня есть POJO с ассоциацией, т.е.

Человек

  • PersonID
  • CompanyID
  • Имя пользователя
  • Компания (ассоциация с Company классом)

Компания

  • CompanyID
  • Название компании

И, допустим, у меня уже есть база данных, полная Company записей, но я хотел бы добавить новую Person Company с идентификатором 1, а затем впоследствии восстановить мою ассоциацию.

 Person p = new Person();
p.setPersonName("Ryan");
p.setCompanyID(1);

personMapper.insert(p);

Company c = p.getCompany() // I'd like to retrieve the association here
  

Я знаю, что могу просто повторно запросить своего пользователя, и ассоциация будет загружена, но является ли это стандартным / приемлемым способом для достижения таких целей?

Т.е.

 Person p = new Person();
p.setPersonName("Ryan");
p.setCompanyID(1);

personMapper.insert(p);

// In the below code, the "PersonID" **did** refresh from the DB after insert 
// so I have access to it, but my associations do not initialize after insert, 
/// so I have to re-query the DB to get a new Person object with my Company association
p = personMappper.get(p.getPersonID()); 

Company c = p.getCompany() // This will return as expected
  

Ответ №1:

Я бы сказал, что вы, вероятно, захотите удалить Person#companyID поле и просто использовать Person#company для управления этим. Когда вы добавляете нового пользователя, вам нужно знать, в какой компании он работает?

 Person p = new Person();
p.setPersonName("ryan");
p.setCompany(companyMapper.get(1));

personMapper.insert(p);
  

Теперь у вас есть свой Person с полным Company . Вам нужно будет выполнить второй запрос независимо (поэтому, чтобы ответить на ваш вопрос да, это правильно, вам понадобится второй запрос), но таким образом вы можете выполнить проверки в компании (т. е. никогда не назначайте идентификатор компании, который не существует).