У меня есть класс сущностей и соответствующий файл статической метамодели со статической переменной volatile.Теперь, когда менеджер сущностей инициализирован, он загружает значения для этих статических изменчивых переменных, что не является проблемой.Но теперь у меня есть две базы данных (скажем, A и B), которые работают в одном и том же потоке Java и для которых инициализирован их собственный менеджер сущностей.И мой вариант использования таков, что база данных A имеет поле X, и менеджер сущностей загружает правильные значения для этого поля, но база данных B не имеет поля X, и менеджер сущностей должен загружать ноль для этого поля, когда он снова инициализируется для базы данных B, но так какэти статические изменяемые поля не являются локальными для потока, они сохраняют значения, которые были записаны им последними.Это вызывает проблему в моей бизнес-логике, в которой я добавляю предикат, используя запрос JPA, если это поле X присутствует или нет.
Один из способов, как я думал, состоит в том, чтобы сделать эти статические изменяемые поля в классе StaticModel локальными для потока, но поскольку hibernate инициализирует эти поля, это не будет работать, потому что для локального потока нам нужно использовать функцию set () для установки локальных значений потока,
Если у кого-нибудь есть указания, как сделать эти переменные локальными для потока, было бы замечательно.Что-то вроде ключевого слова, которое я могу добавить к этим переменным, что может сделать эти переменные локальными для потока (что, я сомневаюсь, существует в Java).
Вот некоторый код, чтобы его было легко визуализировать
@StaticMetamodel(C.class)
public abstract class C_
{
public static volatile SingularAttribute<C, Long> X;
}
Бизнес-логика, которая на основе значения X решает, добавлять ли предикат или нет.
if(C_.X!=null) {
//Add JPA predicate
}
Вышеупомянутый фрагмент кода вызывается другим менеджером сущностей из разных баз данных, одна из которых не имеет столбца X,Но поскольку это отдельный поток Java, X сохраняет свое значение в зависимости от того, какой менеджер сущностей базы данных инициализируется первым, а иногда X является первым нулем и остается нулевым, даже если у менеджера сущностей второй базы данных есть столбец X.
Я надеюсь, что смогу ясно объяснить свою проблему.Я пытался исследовать, но таких сценариев мало.