Как отобразить связь @OneToOne с таблицей stati c в Hibernate - PullRequest
0 голосов
/ 27 января 2020

У меня есть таблица c с двумя столбцами: statusCode, statusName. Эта таблица будет содержать только 7 записей. И таблица Кандидат с отношением OneToOne с Статус .

Это выглядит более или менее так:

@Entity
public class Status {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    Long id;
    String statusName;
    String statusCode;

    // getters and setters
}

И

@Entity
public class Candidate {
    // properties, getters and setters
    @OneToOne
    Status status;
}

Проблема в том, что каждый раз, когда я создаю нового Кандидата, мне также необходимо создать новую запись в моей таблице Status , и таким образом я буду хранить много избыточных данных (всего 7 возможные состояния). Я просто хочу установить идентификатор для статуса в объекте Кандидат и позже, чтобы иметь возможность получать сведения о статусе и таким образом избегать создания ненужных записей в таблице статуса.

Спасибо

Ответы [ 2 ]

2 голосов
/ 27 января 2020

Сначала вы должны изменить OneToOne на ManyToOne

@Entity
public class Candidate{
    // properties, getters and setters

    @ManyToOne
    Status status;
}

И при создании нового Кандидата, чтобы получить статус и присвоить его.

Либо с

Status status = em.find(Status.class, id);

Это загрузит весь статус или, если вы только хотите установить внешний ключ и вам не нужен объект Status

Status status = em.getReference(Status.class, id);

Затем вы можете назначить полученный статус кандидату.

это EntityManager

0 голосов
/ 27 января 2020

Вы должны быть в состоянии сделать что-то похожее на следующее:

В кандидате:

@ManyToOne
@JoinColumn(name="STATUS_ID")
Status status;

В статусе:

@OneToMany(mappedBy="status")
private List<Candidate> candidates;
...