1
19
20 package com.liferay.portal.service.persistence;
21
22 import com.liferay.portal.kernel.dao.orm.ORMException;
23 import com.liferay.portal.kernel.dao.orm.Session;
24 import com.liferay.portal.model.BaseModel;
25 import com.liferay.portal.util.PropsValues;
26
27
34 public class BatchSessionImpl implements BatchSession {
35
36 public boolean isEnabled() {
37 return _enabled.get();
38 }
39
40 public void setEnabled(boolean enabled) {
41 _enabled.set(enabled);
42 }
43
44 public void update(Session session, BaseModel model, boolean merge)
45 throws ORMException {
46
47 if (merge) {
48 session.merge(model);
49 }
50 else {
51 boolean contains = false;
52
53 if (isEnabled()) {
54 Object obj = session.get(
55 model.getClass(), model.getPrimaryKeyObj());
56
57 if ((obj != null) && obj.equals(model)) {
58 contains = true;
59 }
60 }
61
62 if (model.isNew()) {
63 session.save(model);
64 }
65 else if (!contains && !session.contains(model)) {
66 session.saveOrUpdate(model);
67 }
68 }
69
70 if (!isEnabled()) {
71 session.flush();
72
73 return;
74 }
75
76 if (_counter.get() < PropsValues.HIBERNATE_JDBC_BATCH_SIZE) {
77 _counter.set(_counter.get() + 1);
78 }
79 else {
80 _counter.set(BatchSessionCounter.INITIAL_VALUE);
81
82 session.flush();
83 session.clear();
84 }
85 }
86
87 private BatchSessionCounter _counter = new BatchSessionCounter();
88 private BatchSessionEnabled _enabled = new BatchSessionEnabled();
89
90 }