Должен ли я определять JPA ManyToOne лениво или просто отображать необработанный идентификатор в моей сущности, если мне действительно не нужны ссылочные данные?
У меня есть приложение, в которое вы входите через OIDC. Таким образом, из внешнего интерфейса в серверную часть Java / JPA поступает вызов с токеном (идентификатором). У меня есть таблица поиска, которая назначает каждому внешнему идентификатору токена внутренний идентификатор компании:
@Entity(name = "company_mapping")
public class CompanyMapping {
@Id
@GeneratedValue(generator = "system-uuid")
@GenericGenerator(name = "system-uuid", strategy = "uuid")
public UUID id;
public String externalId;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "company_id")
public Company company;
Для каждого набора записей данных компании этот идентификатор компании является внешним ключом. Но мне действительно не нужны данные компании - или только в редких особых случаях. Поэтому я думаю, действительно ли мне нужно каждый раз извлекать компанию / как разработать объекты JPA, чтобы таблица компании ссылалась только на идентификатор компании, а не на всю компанию - или, может быть, это даже не имеет значения, если я сделаю ленивое сопоставление?
@Entity(name="employee")
public class Employee
@Id @GeneratedValue(generator="system-uuid")
@GenericGenerator(name="system-uuid", strategy = "uuid")
private UUID id;
private String email;
private String firstName;
private String lastName;
[...]
@ManyToOne(fetch = FetchType.LAZY)
private Company company; // TODO maybe just use the company uuid here?
1 ответ
Если вам действительно не нужен доступ к данным компании, а только к ее идентификатору, вы можете просто сопоставить ее столбец идентификатора. ЯГНИ и ПОЦЕЛУЙ. Вам даже не нужно создаватьCompany
класс в этом случае.
С другой стороны, даже если вы отобразите компанию как @ManyToOne
с участием LAZY
Тип выборки, при условии, что вы не будете получать доступ к данным компании, кроме ее идентификатора, с точки зрения сгенерированного SQL, они аналогичны простому сопоставлению идентификатора, при котором не будет генерироваться ненужный SQL для получения данных компании.