В идеале, я бы предпочел использовать биржевую бирку в качестве идентификатора. Это похоже на случай, когда у вас есть совершенно хороший натуральный ключ, и поэтому вам не нужен суррогат.
Однако, учитывая вашу объектную модель, я бы выбрал опцию кэширования запросов. К счастью, похоже, что Hibernate позволяет вам контролировать кэш запросов достаточно детально :
Как упоминалось выше, большинство запросов не извлекают выгоду из кэширования или их результатов. Поэтому по умолчанию отдельные запросы не кэшируются даже после включения кэширования запросов. Чтобы включить кэширование результатов для определенного запроса, вызовите org.hibernate.Query.setCacheable (true). Этот вызов позволяет запросу искать существующие результаты кэша или добавлять его результаты в кэш при его выполнении.
Вы очень разумно используете интерфейс JPA для Hibernate, но с этим, я думаю, вы можете получить тот же эффект , используя подсказку запроса :
org.hibernate.cacheable: независимо от того, кэшируется ли запрос (например, new Boolean (true)), по умолчанию используется значение false
Я ни в коем случае не эксперт по Hibernate, но, похоже, вам не нужно переводить вашу сущность в одиночное заключение в ее отдельном постоянном блоке, чтобы включить ее кэширование запросов.