Я знаю, что сеансы не являются потокобезопасными. Мой первый вопрос: безопасно ли передать объект другому потоку, выполнить некоторую работу, затем передать его обратно в исходный поток и обновить.Hibernate session thread security
public class Example1 {
MyDao dao;
...
public void doWork() {
MyEntity entity = dao.getEntity();
Runnable job = new Job(entity);
Thread t = new Thread(job);
t.run();
t.join();
dao.merge(entity);
}
}
Мой второй вопрос: безопасно ли новое создание объекта в одном потоке и сохранять его в другом?
public class Example2 {
MyDao dao;
...
public void doWork() {
MyEntity entity = new Entity();
new Thread(new Job(dao, entity)).run();
}
}
public class Job implements Runnable {
private MyDao dao;
private MyEntity entity;
...
@Override
public void run() {
dao.save(entity);
}
}
Редактировать Я забыл упомянуть, что сущности специально сконфигурированы для загрузки нетерпеливого
Второй пример небезопасен - я думаю, вы также получите исключение, потому что сеанс, который вы используете в вашем DAO, связан с другим потоком, чем ваш Job. Что касается первого, то я не уверен. – isnot2bad
Как я его реализовал, MyDao.merge() по существу является 'sessionFactory.getCurrentSession.merge (entity);' Поэтому он использует сеанс, привязанный к потоку, который его вызывает. – Floegipoky
Почему вы заинтересованы в создании собственных тем? – Lion