Найти тему

Hibernate + JOIN + none или сознательное не выполнение 2НФ, но сохранение ключа.

Всем привет. Это первая моя стать, если у вас есть, что добавить или написать об ошибке, прошу написать это в комментарии, а не оставлять у себя в голове.

И так о себе. Я начинающий разработчик java (себя считаю junior, хоть и занимаюсь этим делом уже более 8 лет), сейчас работаю в банковской системе, по профессии не относящейся к программистам, но задачи стоят по автоматизации (от задач по должностной инструкции, тоже не особо освобожден). Данный блог решил вести только для того, чтобы делиться информацией, которую не смог найти в интернете, но случайно или опытным путем смог найти решение своей проблемы. Статьи думаю будут маленького содержания.

И так моё приложение реализовано как расширение возможностей для поиска и контроля выполняемых задач подразделением, т.е. собираю информацию из разных источников и даю более расширенный интерфейс для работы. Бывает так, что информация, которая выгружается и которая выводиться в интерфейсе не равны, а именно например для увеличения скорости работы данные архивируют в доп. таблицу (на другом сервере, другой подсети и т.д., что получить доступ туда, нужной пройти 7 кругов ада). Интерфейс выводит ту информацию, которая уже выгрузка не покажет. В данном случае логично было с моей стороны просто давать сотрудникам прямую ссылку на устаревшие данные в WEB-интерфейсе, а остальное, что успел выгрузить вывести у себя. Тут и выходит проблема, что делать если данных в доп. таблице нет, а ключ есть (например ИД задачи в другой системе)?

Тут я случайно нарвался на ответ, когда провел несколько практических тестов с вводом свойств в класс.

Если получить объект tst, будет выброшено исключение, что его нет в связующей таблице, но мы можем получить его ID просто добавив в класс свойство tst_id с типом из объекта TST у меня это String.

Всем спасибо, кто смог осилить данную статью и прошу написать комментарий, для проведения работы над собой.

@Entity
public class Terminal {
@Id
@Column(length = 15)
private String id;
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "tst_id")
@org.hibernate.annotations.ForeignKey(name = "none")
private TST tst;
@Column(insertable = false, updatable = false)
private String tst_id ;
public Terminal() {
}
}