Предположим, у меня есть два типа сущностей: Пользователь и Страна.
Объекты страны никогда не создаются и не являются изменяемыми. Они обозначены кодами стран ISO альфа3, например, "СОЕДИНЕННЫЕ ШТАТЫ АМЕРИКИ". Они находятся в таблице СТРАНА с идентификатором столбца PK.
У пользователей есть много-к-одному отображение Страны w / cascade = нет. Пользователи находятся в таблице USER со столбцом FK COUNTRY_ID, который ссылается на COUNTRY (ID).
При создании нового пользователя я могу сделать что-то вроде:
User user = new User();
user.setCountry(em.find(Country.class, "USA"));
em.persist(user);
Я полагаю, что это расточительно, поскольку сначала требуется запрос к СТРАНЕ. Итак, я заметил, что я тоже могу сделать это:
Country usa = new Country();
usa.setId("USA");
User user = new User();
user.setCountry(usa);
em.persist(user);
Поскольку cascade = "none", для этого не нужно запрашивать таблицу COUNTRY; он должен просто вставить «США» непосредственно в USER как COUNTRY_ID. Это правильно?
Теперь предположим, что есть какой-то код, который создает пользователей только с COUNTRY_ID = "USA". В таком случае мне пришло в голову сохранить статический экземпляр Country с ID = "USA" и использовать его для каждого нового пользователя? Например:
public class UsaUserFactory implements Factory<User> {
private static final Country USA = new Country();
static { USA.setId("USA"); }
public User newInstance() {
User user = new User();
user.setCountry(USA);
return user;
}
}
public SomeOtherClass {
public void persistUser(EntityManager em, Factory<User> uf, ...) {
User user = uf.newInstance();
// set some other properties
em.persist(user);
}
}
Предположим, что persistUser () вызывается одновременно из нескольких потоков и из нескольких контекстов персистентности.
Мои вопросы:
Будут ли сохраняющиеся пользовательские сущности каким-либо образом изменять мой единственный экземпляр "USA" Country?
Это совершенно нецелесообразно по каким-то другим причинам?
Два класса выше просто иллюстрируют вопрос; На самом деле я не делаю ничего такого глупого.