Hibernate JPA сценарий, чтобы решить? - PullRequest
0 голосов
/ 30 октября 2018

Есть класс консультанта. Консультант может иметь много опыта, как наемный, работающий не по найму, фрилансер. Для каждого типа опыта существуют разные данные для сохранения в базе данных.

оклад:

Общий опыт
Название компании
Опыт Время в годах Предложение / Наслаждающееся письмо Ссылка

Частное предприятие:

Название компании
Общий опыт
CIN_Number
GST_Number
CompanyCertificateLinkUrl

FreeLancer:

Общий опыт

Пользователь может иметь опыт работы в более чем одном типе профессии, например, консультант является наемным и фрилансером, или самостоятельно занятым, а также наемным и фрилансером. Поэтому я не совсем понимаю, как создать класс @Entity для этого типа использования.

Мое решение

@Entity
class Consultant{

@Id
int id;

@OneToOne
Salaried semp;

@OneToOne
SelfEmployed selfemp;

@OneToOne
Freelancer femp;
}

Но я думаю, что это не очень хорошая практика, так как это приведет ко многим пустым полям в базе данных.

ЛЮБОЕ ЛУЧШЕЕ РЕШЕНИЕ

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Я думаю, что ваш подход в порядке. @OneToOne поля являются необязательными по умолчанию, поэтому могут быть нулевыми. Это означает, что в соответствующих таблицах не будет строки, поэтому в таблице «Консультант» может быть только два пустых значения на строку.

Если вас действительно беспокоят нулевые значения в базе данных, вы можете отобразить отношения другим способом, поэтому:

@Entity
class Consultant{

    @Id
    int id;

    @OneToOne(mappedBy = "consultant")
    Salaried semp;

    @OneToOne(mappedBy = "consultant")
    SelfEmployed selfemp;

    @OneToOne(mappedBy = "consultant")
    Freelancer femp;
}

Таким образом, если в таблице Salaried нет строки, связанной с Консультантом, поле semp будет нулевым в объекте Consultant.

0 голосов
/ 31 октября 2018

вы можете сделать с двумя классами consultant и profession (идентификатор, имя) и отношением OneToMany, ManyToOne

Организация консультанта

@Entity
class Consultant{

    @Id
    private int id;

    @OneToMany(mappedBy = "consultant",cascade = CascadeType.All)
    List<ConsultantProfession> cp;

}

Субъект профессии

@Entity
class Profession{

    @Id
    private int id;

    private String name;

    @OneToMany(mappedBy = "profession", cascade = CascadeType.All)
    private List<ConsultantProfession> cp;

}

Организация КонсультантПрофессии

@Entity
@Table(name="consultant_profession")
public class ConsultantProfession{

    @Id
    private int id;

    // this is the link to the consultant class
    @ManyToOne
    @JoinColumn(name="consultant_id")
    private Consultant consultant; // this name is specified in the class seeing patients as value of parameter `mappedBy`

    // this is the link to the profession class

    @ManyToOne
    @JoinColumn(name="profession_id") 
    private Profession profession;

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