#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
. Вам нужно будет выполнить второй запрос независимо (поэтому, чтобы ответить на ваш вопрос да, это правильно, вам понадобится второй запрос), но таким образом вы можете выполнить проверки в компании (т. е. никогда не назначайте идентификатор компании, который не существует).