Как создать учетную запись пользователя для различных объектов в Spring JPA? - PullRequest
0 голосов
/ 29 мая 2019

Я создаю систему (использующую Spring + JPA с MySQL), которая показывает лучших претендентов на определенное предложение о работе. company и applicants имеют свои соответствующие user account, и с этим они могут заполнить свои personal/company information и свои job profile/job offer conditions. При этом система должна соответствовать условиям работы (например, 3+ года опыта работы в C) с профилем работы кандидата.

Sample class diagram

Моя проблема в том, что учетная запись пользователя создается первой и должна быть независимой, но ее используют два разных субъекта (заявитель и компания) с разными атрибутами. Поэтому, если я сделаю что-то вроде создания applicant и company в учетной записи пользователя, один из них всегда будет нулевым.

Как я могу решить это? Я думаю, что проблема будет что-то вроде: как реализовать учетную запись пользователя, которая может хранить данные из разных объектов, которые имеют разные атрибуты (следовательно, не могут быть сгруппированы)? (На самом деле мне нужна еще одна сущность, но я попытался упростить ее, чтобы проиллюстрировать проблему более четко).

Ответы [ 2 ]

0 голосов
/ 30 мая 2019

Я нашел то, что мне было нужно здесь: https://thoughts -on-java.org / complete-guide-наследование-стратегии-jpa-hibernate /

Проблема была в отображении,не дизайн класса как таковой.Я мог бы создать интерфейсы и абстрактные классы для решения этой проблемы в мире Java, но в мире SQL это невозможно, поэтому ключом является отображение.В этом случае я искал отображение Объединенная таблица , но я понял, что оно мне просто нужно, чтобы в моем UserAccount не было пустых полей, потому что мне не нужен полиморфный запрос (например, дайте мнеимена каждого «пользовательского типа» (Person, Company)), и для его реализации было бы слишком дорого обходиться с точки зрения производительности, так что я буду тратить место на производительность и просто буду ссылаться на всетри пользовательских типа в User Account, оставляя два из этих трех полей пустыми навсегда.

PS: сопоставление одной таблицы не поможет, потому что мне нужно использовать условия not null.

0 голосов
/ 29 мая 2019

Я думаю, вы должны сделать маркерный интерфейс, например public interface UserAccountable или что-то в этом роде. Реализуйте этот интерфейс в ваших Applicant и Company классах. Затем вы можете создать поле в классе UserAccount, например private UserAccountable someUser;, и через установщики и получатели, которые вы можете назначить и передать эту переменную Заявителю или Компании. Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...