Должен ли я определять 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 для получения данных компании.

Другие вопросы по тегам