Я пишу приложение JPA на Glassfish 3.1.2.2, EclipseLink 2.3.2. Я использую Spring MVC, а также, с управляемой контейнером EntityManager (@PersistenceContext
впрыскивается весной, но созданный контейнер с помощью jee:jndi-lookup
)EclipseLink пакетная запись не работает в приложении JPA/JTA
Я поставил eclipselink.jdbc.batch-writing
в JDBC
в persistence.xml и это не работает, как ожидалось.
Моего кода имеет достаточно простую петлю, чтобы написать кучу объектов
UserTransaction tx = ...;
tx.begin();
for (MyObject obj : list) {
entityManager.persist(obj);
}
tx.commit();
Batch написание делает работы, если я заменю UserTransaction с @Transactional
аннотацией вокруг метода, хотя!
Я вижу отдельную единицу работы, созданную для каждого сохраняется вызов:
FINER: client acquired: 3418589
FINER: TX binding to tx mgr, status=STATUS_ACTIVE
FINER: acquire unit of work: 11053522
FINEST: persist() operation called on: [email protected]
....
FINER: client acquired: 23361578
FINER: TX binding to tx mgr, status=STATUS_ACTIVE
FINER: acquire unit of work: 17636998
FINEST: persist() operation called on: [email protected]
Операция БД не на самом деле не выполнить до фиксации, как и следовало ожидать - но каждая единица работы имеет свою собственную партию :
FINER: TX beforeCompletion callback, status=STATUS_ACTIVE
FINER: begin unit of work commit
FINER: TX beginTransaction, status=STATUS_ACTIVE
FINEST: Execute query InsertObjectQuery([email protected])
FINEST: Connection acquired from connection pool [default].
FINEST: Execute query
FINER: Begin batch statements
FINE: INSERT INTO ....
FINE: bind => [24 parameters bound]
FINER: End Batch Statements
Любые идеи, что мне не хватает? Я считаю, что корень проблемы - это отдельная единица работы на каждый упор.
Примечание Я сделать см пакетирования работы для дочерних организаций, которые каскадно через один сохраняются, в одной единице работы. Но каждый набор родителей/детей является результатом отдельной партии.
Какой драйвер JDBC вы использовали и поддерживает ли он пакетное письмо. –
Oracle. Поддержка JDBC-драйверов, когда я использую JDBC напрямую (не через JPA) – wrschneider
Также см. Комментарий в редакторе – wrschneider