001// --------------------------------------------------------------------------------
002// Copyright 2002-2024 Echo Three, LLC
003//
004// Licensed under the Apache License, Version 2.0 (the "License");
005// you may not use this file except in compliance with the License.
006// You may obtain a copy of the License at
007//
008//     http://www.apache.org/licenses/LICENSE-2.0
009//
010// Unless required by applicable law or agreed to in writing, software
011// distributed under the License is distributed on an "AS IS" BASIS,
012// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013// See the License for the specific language governing permissions and
014// limitations under the License.
015// --------------------------------------------------------------------------------
016// Generated File -- DO NOT EDIT BY HAND
017// --------------------------------------------------------------------------------
018
019/**
020 * UserVisitFactory.java
021 */
022
023package com.echothree.model.data.user.server.factory;
024
025import com.echothree.model.data.user.common.pk.UserVisitGroupPK;
026import com.echothree.model.data.user.common.pk.UserKeyPK;
027import com.echothree.model.data.party.common.pk.LanguagePK;
028import com.echothree.model.data.accounting.common.pk.CurrencyPK;
029import com.echothree.model.data.party.common.pk.TimeZonePK;
030import com.echothree.model.data.party.common.pk.DateTimeFormatPK;
031import com.echothree.model.data.offer.common.pk.OfferUsePK;
032import com.echothree.model.data.associate.common.pk.AssociateReferralPK;
033
034import com.echothree.model.data.user.server.entity.UserVisitGroup;
035import com.echothree.model.data.user.server.entity.UserKey;
036import com.echothree.model.data.party.server.entity.Language;
037import com.echothree.model.data.accounting.server.entity.Currency;
038import com.echothree.model.data.party.server.entity.TimeZone;
039import com.echothree.model.data.party.server.entity.DateTimeFormat;
040import com.echothree.model.data.offer.server.entity.OfferUse;
041import com.echothree.model.data.associate.server.entity.AssociateReferral;
042
043import com.echothree.model.data.user.common.UserVisitConstants;
044import com.echothree.model.data.user.common.pk.UserVisitPK;
045import com.echothree.model.data.user.server.value.UserVisitValue;
046import com.echothree.model.data.user.server.entity.UserVisit;
047import com.echothree.util.common.exception.PersistenceDatabaseException;
048import com.echothree.util.common.exception.PersistenceDatabaseUpdateException;
049import com.echothree.util.common.exception.PersistenceNotNullException;
050import com.echothree.util.server.persistence.BaseFactory;
051import com.echothree.util.server.persistence.EntityIdGenerator;
052import com.echothree.util.server.persistence.EntityPermission;
053import com.echothree.util.server.persistence.PersistenceDebugFlags;
054import com.echothree.util.server.persistence.Session;
055import com.echothree.util.server.persistence.ThreadSession;
056import java.sql.PreparedStatement;
057import java.sql.ResultSet;
058import java.sql.SQLException;
059import java.sql.Types;
060import java.io.ByteArrayInputStream;
061import java.io.StringReader;
062import java.util.ArrayList;
063import java.util.Collection;
064import java.util.HashSet;
065import java.util.List;
066import java.util.Map;
067import java.util.Set;
068import org.apache.commons.logging.Log;
069import org.apache.commons.logging.LogFactory;
070
071public class UserVisitFactory
072        implements BaseFactory<UserVisitPK, UserVisit> {
073    
074    //final private static Log log = LogFactory.getLog(UserVisitFactory.class);
075    
076    final private static String SQL_SELECT_READ_ONLY = "SELECT uvis_uservisitid, uvis_uvisgrp_uservisitgroupid, uvis_ukey_userkeyid, uvis_preferredlanguageid, uvis_preferredcurrencyid, uvis_preferredtimezoneid, uvis_preferreddatetimeformatid, uvis_lastcommandtime, uvis_ofruse_offeruseid, uvis_ascrfr_associatereferralid, uvis_retainuntiltime, uvis_fromtime, uvis_thrutime FROM uservisits WHERE uvis_uservisitid = ?";
077    final private static String SQL_SELECT_READ_WRITE = "SELECT uvis_uservisitid, uvis_uvisgrp_uservisitgroupid, uvis_ukey_userkeyid, uvis_preferredlanguageid, uvis_preferredcurrencyid, uvis_preferredtimezoneid, uvis_preferreddatetimeformatid, uvis_lastcommandtime, uvis_ofruse_offeruseid, uvis_ascrfr_associatereferralid, uvis_retainuntiltime, uvis_fromtime, uvis_thrutime FROM uservisits WHERE uvis_uservisitid = ? FOR UPDATE";
078    final private static String SQL_INSERT = "INSERT INTO uservisits (uvis_uservisitid, uvis_uvisgrp_uservisitgroupid, uvis_ukey_userkeyid, uvis_preferredlanguageid, uvis_preferredcurrencyid, uvis_preferredtimezoneid, uvis_preferreddatetimeformatid, uvis_lastcommandtime, uvis_ofruse_offeruseid, uvis_ascrfr_associatereferralid, uvis_retainuntiltime, uvis_fromtime, uvis_thrutime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)";
079    final private static String SQL_UPDATE = "UPDATE uservisits SET uvis_uvisgrp_uservisitgroupid = ?, uvis_ukey_userkeyid = ?, uvis_preferredlanguageid = ?, uvis_preferredcurrencyid = ?, uvis_preferredtimezoneid = ?, uvis_preferreddatetimeformatid = ?, uvis_lastcommandtime = ?, uvis_ofruse_offeruseid = ?, uvis_ascrfr_associatereferralid = ?, uvis_retainuntiltime = ?, uvis_fromtime = ?, uvis_thrutime = ? WHERE uvis_uservisitid = ?";
080    final private static String SQL_DELETE = "DELETE FROM uservisits WHERE uvis_uservisitid = ?";
081    final private static String SQL_VALID = "SELECT COUNT(*) FROM uservisits WHERE uvis_uservisitid = ?";
082    
083    final private static String PK_COLUMN = "uvis_uservisitid";
084    final private static String ALL_COLUMNS = "uvis_uservisitid, uvis_uvisgrp_uservisitgroupid, uvis_ukey_userkeyid, uvis_preferredlanguageid, uvis_preferredcurrencyid, uvis_preferredtimezoneid, uvis_preferreddatetimeformatid, uvis_lastcommandtime, uvis_ofruse_offeruseid, uvis_ascrfr_associatereferralid, uvis_retainuntiltime, uvis_fromtime, uvis_thrutime";
085    final public static String TABLE_NAME = "uservisits";
086    
087    final public static String UVIS_USERVISITID = "uvis_uservisitid";
088    final public static String UVIS_UVISGRP_USERVISITGROUPID = "uvis_uvisgrp_uservisitgroupid";
089    final public static String UVIS_UKEY_USERKEYID = "uvis_ukey_userkeyid";
090    final public static String UVIS_PREFERREDLANGUAGEID = "uvis_preferredlanguageid";
091    final public static String UVIS_PREFERREDCURRENCYID = "uvis_preferredcurrencyid";
092    final public static String UVIS_PREFERREDTIMEZONEID = "uvis_preferredtimezoneid";
093    final public static String UVIS_PREFERREDDATETIMEFORMATID = "uvis_preferreddatetimeformatid";
094    final public static String UVIS_LASTCOMMANDTIME = "uvis_lastcommandtime";
095    final public static String UVIS_OFRUSE_OFFERUSEID = "uvis_ofruse_offeruseid";
096    final public static String UVIS_ASCRFR_ASSOCIATEREFERRALID = "uvis_ascrfr_associatereferralid";
097    final public static String UVIS_RETAINUNTILTIME = "uvis_retainuntiltime";
098    final public static String UVIS_FROMTIME = "uvis_fromtime";
099    final public static String UVIS_THRUTIME = "uvis_thrutime";
100    
101    final private static EntityIdGenerator entityIdGenerator = new EntityIdGenerator(UserVisitConstants.COMPONENT_VENDOR_NAME, UserVisitConstants.ENTITY_TYPE_NAME);
102    
103    /** Creates a new instance of UserVisitFactory */
104    private UserVisitFactory() {
105        super();
106    }
107    
108    private static class UserVisitFactoryHolder {
109        static UserVisitFactory instance = new UserVisitFactory();
110    }
111    
112    public static UserVisitFactory getInstance() {
113        return UserVisitFactoryHolder.instance;
114    }
115    
116    @Override
117    public String getPKColumn() {
118        return PK_COLUMN;
119    }
120    
121    @Override
122    public String getAllColumns() {
123        return ALL_COLUMNS;
124    }
125    
126    @Override
127    public String getTableName() {
128        return TABLE_NAME;
129    }
130    
131    @Override
132    public String getComponentVendorName() {
133        return UserVisitConstants.COMPONENT_VENDOR_NAME;
134    }
135    
136    @Override
137    public String getEntityTypeName() {
138        return UserVisitConstants.ENTITY_TYPE_NAME;
139    }
140    
141    public PreparedStatement prepareStatement(String query) {
142        return ThreadSession.currentSession().prepareStatement(UserVisitFactory.class, query);
143    }
144    
145    public UserVisitPK getNextPK() {
146        return new UserVisitPK(entityIdGenerator.getNextEntityId());
147    }
148    
149    public Set<UserVisitPK> getPKsFromResultSetAsSet(ResultSet rs)
150            throws PersistenceDatabaseException {
151        Set<UserVisitPK> _result = new HashSet<>();
152        
153        try {
154            while(rs.next()) {
155                _result.add(getPKFromResultSet(rs));
156            }
157        } catch (SQLException se) {
158            throw new PersistenceDatabaseException(se);
159        }
160        
161        return _result;
162    }
163    
164    public java.util.List<UserVisitPK> getPKsFromResultSetAsList(ResultSet rs)
165            throws PersistenceDatabaseException {
166        java.util.List<UserVisitPK> _result = new ArrayList<>();
167        
168        try {
169            while(rs.next()) {
170                _result.add(getPKFromResultSet(rs));
171            }
172        } catch (SQLException se) {
173            throw new PersistenceDatabaseException(se);
174        }
175        
176        return _result;
177    }
178    
179    public UserVisitPK getPKFromResultSet(ResultSet rs)
180            throws PersistenceDatabaseException {
181        UserVisitPK _result;
182        
183        try {
184            long uvis_uservisitid = rs.getLong(UVIS_USERVISITID);
185            Long _entityId = rs.wasNull() ? null : uvis_uservisitid;
186            
187            _result = new UserVisitPK(_entityId);
188        } catch (SQLException se) {
189            throw new PersistenceDatabaseException(se);
190        }
191        
192        return _result;
193    }
194    
195    public java.util.List<UserVisitValue> getValuesFromPKs(Session session, Collection<UserVisitPK> pks)
196            throws PersistenceDatabaseException {
197        java.util.List<UserVisitValue> _values = new ArrayList<>(pks.size());
198        
199        for(UserVisitPK _pk: pks) {
200            _values.add(getValueFromPK(session, _pk));
201        }
202        
203        return _values;
204    }
205    
206    public UserVisitValue getValueFromPK(Session session, UserVisitPK pk)
207            throws PersistenceDatabaseException {
208        UserVisitValue _value;
209        
210        // See if we already have the entity in the session cache
211        UserVisit _entity = (UserVisit)session.getEntity(pk);
212        if(_entity == null)
213            _value = getEntityFromPK(session, EntityPermission.READ_ONLY, pk).getUserVisitValue();
214        else
215            _value = _entity.getUserVisitValue();
216        
217        return _value;
218    }
219    
220    public java.util.List<UserVisitValue> getValuesFromResultSet(Session session, ResultSet rs)
221            throws PersistenceDatabaseException {
222        java.util.List<UserVisitValue> _result = new ArrayList<>();
223        
224        try {
225            while(rs.next()) {
226                _result.add(getValueFromResultSet(session, rs));
227            }
228        } catch (SQLException se) {
229            throw new PersistenceDatabaseException(se);
230        }
231        
232        return _result;
233    }
234    
235    public UserVisitValue getValueFromResultSet(Session session, ResultSet rs)
236            throws PersistenceDatabaseException {
237        UserVisitValue _value;
238        
239        try {
240            Long uvis_uservisitid = rs.getLong(UVIS_USERVISITID);
241            UserVisitPK _pk = new UserVisitPK(uvis_uservisitid);
242            
243            // See if we already have the entity in the session cache
244            UserVisit _entity = (UserVisit)session.getEntity(_pk);
245            
246            if(_entity == null) {
247                Long uvis_uvisgrp_uservisitgroupid = rs.getLong(UVIS_UVISGRP_USERVISITGROUPID);
248                if(rs.wasNull())
249                    uvis_uvisgrp_uservisitgroupid = null;
250                
251                Long uvis_ukey_userkeyid = rs.getLong(UVIS_UKEY_USERKEYID);
252                if(rs.wasNull())
253                    uvis_ukey_userkeyid = null;
254                
255                Long uvis_preferredlanguageid = rs.getLong(UVIS_PREFERREDLANGUAGEID);
256                if(rs.wasNull())
257                    uvis_preferredlanguageid = null;
258                
259                Long uvis_preferredcurrencyid = rs.getLong(UVIS_PREFERREDCURRENCYID);
260                if(rs.wasNull())
261                    uvis_preferredcurrencyid = null;
262                
263                Long uvis_preferredtimezoneid = rs.getLong(UVIS_PREFERREDTIMEZONEID);
264                if(rs.wasNull())
265                    uvis_preferredtimezoneid = null;
266                
267                Long uvis_preferreddatetimeformatid = rs.getLong(UVIS_PREFERREDDATETIMEFORMATID);
268                if(rs.wasNull())
269                    uvis_preferreddatetimeformatid = null;
270                
271                Long uvis_lastcommandtime = rs.getLong(UVIS_LASTCOMMANDTIME);
272                if(rs.wasNull())
273                    uvis_lastcommandtime = null;
274                
275                Long uvis_ofruse_offeruseid = rs.getLong(UVIS_OFRUSE_OFFERUSEID);
276                if(rs.wasNull())
277                    uvis_ofruse_offeruseid = null;
278                
279                Long uvis_ascrfr_associatereferralid = rs.getLong(UVIS_ASCRFR_ASSOCIATEREFERRALID);
280                if(rs.wasNull())
281                    uvis_ascrfr_associatereferralid = null;
282                
283                Long uvis_retainuntiltime = rs.getLong(UVIS_RETAINUNTILTIME);
284                if(rs.wasNull())
285                    uvis_retainuntiltime = null;
286                
287                Long uvis_fromtime = rs.getLong(UVIS_FROMTIME);
288                if(rs.wasNull())
289                    uvis_fromtime = null;
290                
291                Long uvis_thrutime = rs.getLong(UVIS_THRUTIME);
292                if(rs.wasNull())
293                    uvis_thrutime = null;
294                
295                _value = new UserVisitValue(_pk, new UserVisitGroupPK(uvis_uvisgrp_uservisitgroupid), new UserKeyPK(uvis_ukey_userkeyid), new LanguagePK(uvis_preferredlanguageid), new CurrencyPK(uvis_preferredcurrencyid), new TimeZonePK(uvis_preferredtimezoneid), new DateTimeFormatPK(uvis_preferreddatetimeformatid), uvis_lastcommandtime, new OfferUsePK(uvis_ofruse_offeruseid), new AssociateReferralPK(uvis_ascrfr_associatereferralid), uvis_retainuntiltime, uvis_fromtime, uvis_thrutime);
296            } else
297                _value = _entity.getUserVisitValue();
298        } catch (SQLException se) {
299            throw new PersistenceDatabaseException(se);
300        }
301        
302        return _value;
303    }
304    
305    public java.util.List<UserVisit> getEntitiesFromPKs(EntityPermission entityPermission, Collection<UserVisitPK> pks)
306            throws PersistenceDatabaseException {
307        return getEntitiesFromPKs(ThreadSession.currentSession(), entityPermission, pks);
308    }
309    
310    public java.util.List<UserVisit> getEntitiesFromPKs(Session session, EntityPermission entityPermission, Collection<UserVisitPK> pks)
311            throws PersistenceDatabaseException {
312        java.util.List<UserVisit> _entities = new ArrayList<>(pks.size());
313        
314        for(UserVisitPK _pk: pks) {
315            _entities.add(getEntityFromPK(session, entityPermission, _pk));
316        }
317        
318        return _entities;
319    }
320    
321    public UserVisit getEntityFromValue(EntityPermission entityPermission, UserVisitValue value) {
322        return getEntityFromPK(ThreadSession.currentSession(), entityPermission, value.getPrimaryKey());
323    }
324    
325    public UserVisit getEntityFromValue(Session session, EntityPermission entityPermission, UserVisitValue value) {
326        return getEntityFromPK(session, entityPermission, value.getPrimaryKey());
327    }
328    
329    public UserVisit getEntityFromPK(EntityPermission entityPermission, UserVisitPK pk)
330            throws PersistenceDatabaseException {
331        return getEntityFromPK(ThreadSession.currentSession(), entityPermission, pk);
332    }
333    
334    public UserVisit getEntityFromCache(Session session, UserVisitPK pk) {
335        UserVisitValue _value = (UserVisitValue)session.getValueCache().get(pk);
336    
337        return _value == null ? null : new UserVisit(_value, EntityPermission.READ_ONLY);
338    }
339    
340    public UserVisit getEntityFromPK(Session session, EntityPermission entityPermission, UserVisitPK pk)
341            throws PersistenceDatabaseException {
342        UserVisit _entity;
343        
344        // See if we already have the entity in the session cache
345        _entity = (UserVisit)session.getEntity(pk);
346        if(_entity != null) {
347            // If the requested permission is READ_WRITE, and the cached permission is
348            // READ_ONLY, then pretend that the cached object wasn't found, and create
349            // a new entity that is READ_WRITE.
350            if(entityPermission.equals(EntityPermission.READ_WRITE)) {
351                if(_entity.getEntityPermission().equals(EntityPermission.READ_ONLY))
352                    _entity = null;
353            }
354        }
355        
356        if(_entity == null && entityPermission.equals(EntityPermission.READ_ONLY)) {
357            _entity = getEntityFromCache(session, pk);
358        }
359        
360        if(_entity == null) {
361            PreparedStatement _ps = session.prepareStatement(entityPermission.equals(EntityPermission.READ_ONLY)? SQL_SELECT_READ_ONLY: SQL_SELECT_READ_WRITE);
362            long _entityId = pk.getEntityId();
363            ResultSet _rs = null;
364            
365            try {
366                _ps.setLong(1, _entityId);
367                _rs = _ps.executeQuery();
368                if(_rs.next()) {
369                    _entity = getEntityFromResultSet(session, entityPermission, _rs);
370                }
371            } catch (SQLException se) {
372                throw new PersistenceDatabaseException(se);
373            } finally {
374                if(_rs != null) {
375                    try {
376                        _rs.close();
377                    } catch (SQLException se) {
378                        // do nothing
379                    }
380                }
381            }
382        }
383        
384        return _entity;
385    }
386    
387    public Set<UserVisitPK> getPKsFromQueryAsSet(PreparedStatement ps, final Object... params)
388            throws PersistenceDatabaseException {
389        Set<UserVisitPK> _pks;
390        ResultSet _rs = null;
391        
392        try {
393            if(params.length != 0) {
394                Session.setQueryParams(ps, params);
395            }
396            
397            _rs = ps.executeQuery();
398            _pks = getPKsFromResultSetAsSet(_rs);
399            _rs.close();
400        } catch (SQLException se) {
401            throw new PersistenceDatabaseException(se);
402        } finally {
403            if(_rs != null) {
404                try {
405                    _rs.close();
406                } catch (SQLException se) {
407                    // do nothing
408                }
409            }
410        }
411        
412        return _pks;
413    }
414    
415    public java.util.List<UserVisitPK> getPKsFromQueryAsList(PreparedStatement ps, final Object... params)
416            throws PersistenceDatabaseException {
417        java.util.List<UserVisitPK> _pks;
418        ResultSet _rs = null;
419        
420        try {
421            if(params.length != 0) {
422                Session.setQueryParams(ps, params);
423            }
424            
425            _rs = ps.executeQuery();
426            _pks = getPKsFromResultSetAsList(_rs);
427            _rs.close();
428        } catch (SQLException se) {
429            throw new PersistenceDatabaseException(se);
430        } finally {
431            if(_rs != null) {
432                try {
433                    _rs.close();
434                } catch (SQLException se) {
435                    // do nothing
436                }
437            }
438        }
439        
440        return _pks;
441    }
442    
443    public UserVisitPK getPKFromQuery(PreparedStatement ps, final Object... params)
444            throws PersistenceDatabaseException {
445        UserVisitPK _pk = null;
446        ResultSet _rs = null;
447        
448        try {
449            if(params.length != 0) {
450                Session.setQueryParams(ps, params);
451            }
452            
453            _rs = ps.executeQuery();
454            if(_rs.next()) {
455                _pk = getPKFromResultSet(_rs);
456            }
457            _rs.close();
458        } catch (SQLException se) {
459            throw new PersistenceDatabaseException(se);
460        } finally {
461            if(_rs != null) {
462                try {
463                    _rs.close();
464                } catch (SQLException se) {
465                    // do nothing
466                }
467            }
468        }
469        
470        return _pk;
471    }
472    
473    public java.util.List<UserVisit> getEntitiesFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
474            throws PersistenceDatabaseException {
475        PreparedStatement ps = session.prepareStatement(UserVisitFactory.class, queryMap.get(entityPermission));
476        
477        return getEntitiesFromQuery(session, entityPermission, ps, params);
478    }
479    
480    public java.util.List<UserVisit> getEntitiesFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
481            throws PersistenceDatabaseException {
482        Session session = ThreadSession.currentSession();
483        PreparedStatement ps = session.prepareStatement(UserVisitFactory.class, queryMap.get(entityPermission));
484        
485        return getEntitiesFromQuery(session, entityPermission, ps, params);
486    }
487    
488    public java.util.List<UserVisit> getEntitiesFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
489            throws PersistenceDatabaseException {
490        PreparedStatement ps = session.prepareStatement(UserVisitFactory.class, queryMap.get(entityPermission));
491        
492        return getEntitiesFromQuery(session, entityPermission, ps);
493    }
494    
495    public java.util.List<UserVisit> getEntitiesFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
496            throws PersistenceDatabaseException {
497        Session session = ThreadSession.currentSession();
498        PreparedStatement ps = session.prepareStatement(UserVisitFactory.class, queryMap.get(entityPermission));
499        
500        return getEntitiesFromQuery(session, entityPermission, ps);
501    }
502    
503    public java.util.List<UserVisit> getEntitiesFromQuery(EntityPermission entityPermission, PreparedStatement ps)
504            throws PersistenceDatabaseException {
505        return getEntitiesFromQuery(ThreadSession.currentSession(), entityPermission, ps);
506    }
507    
508    public java.util.List<UserVisit> getEntitiesFromQuery(EntityPermission entityPermission, PreparedStatement ps, final Object... params)
509            throws PersistenceDatabaseException {
510        return getEntitiesFromQuery(ThreadSession.currentSession(), entityPermission, ps, params);
511    }
512    
513    public java.util.List<UserVisit> getEntitiesFromQuery(Session session, EntityPermission entityPermission, PreparedStatement ps, final Object... params)
514            throws PersistenceDatabaseException {
515        java.util.List<UserVisit> _entities;
516        ResultSet _rs = null;
517        
518        try {
519            if(params.length != 0) {
520                Session.setQueryParams(ps, params);
521            }
522            
523            _rs = ps.executeQuery();
524            _entities = getEntitiesFromResultSet(session, entityPermission, _rs);
525            _rs.close();
526        } catch (SQLException se) {
527            throw new PersistenceDatabaseException(se);
528        } finally {
529            if(_rs != null) {
530                try {
531                    _rs.close();
532                } catch (SQLException se) {
533                    // do nothing
534                }
535            }
536        }
537        
538        return _entities;
539    }
540    
541    public UserVisit getEntityFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
542            throws PersistenceDatabaseException {
543        PreparedStatement ps = session.prepareStatement(UserVisitFactory.class, queryMap.get(entityPermission));
544        
545        return getEntityFromQuery(session, entityPermission, ps, params);
546    }
547    
548    public UserVisit getEntityFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
549            throws PersistenceDatabaseException {
550        Session session = ThreadSession.currentSession();
551        PreparedStatement ps = session.prepareStatement(UserVisitFactory.class, queryMap.get(entityPermission));
552        
553        return getEntityFromQuery(session, entityPermission, ps, params);
554    }
555    
556    public UserVisit getEntityFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
557            throws PersistenceDatabaseException {
558        PreparedStatement ps = session.prepareStatement(UserVisitFactory.class, queryMap.get(entityPermission));
559        
560        return getEntityFromQuery(session, entityPermission, ps);
561    }
562    
563    public UserVisit getEntityFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
564            throws PersistenceDatabaseException {
565        Session session = ThreadSession.currentSession();
566        PreparedStatement ps = session.prepareStatement(UserVisitFactory.class, queryMap.get(entityPermission));
567        
568        return getEntityFromQuery(session, entityPermission, ps);
569    }
570    
571    public UserVisit getEntityFromQuery(EntityPermission entityPermission, PreparedStatement ps)
572            throws PersistenceDatabaseException {
573        return getEntityFromQuery(ThreadSession.currentSession(), entityPermission, ps);
574    }
575    
576    public UserVisit getEntityFromQuery(EntityPermission entityPermission, PreparedStatement ps, final Object... params)
577            throws PersistenceDatabaseException {
578        return getEntityFromQuery(ThreadSession.currentSession(), entityPermission, ps, params);
579    }
580    
581    public UserVisit getEntityFromQuery(Session session, EntityPermission entityPermission, PreparedStatement ps, final Object... params)
582            throws PersistenceDatabaseException {
583        UserVisit _entity = null;
584        ResultSet _rs = null;
585        
586        try {
587            if(params.length != 0) {
588                Session.setQueryParams(ps, params);
589            }
590            
591            _rs = ps.executeQuery();
592            if(_rs.next()) {
593                _entity = getEntityFromResultSet(session, entityPermission, _rs);
594            }
595            _rs.close();
596        } catch (SQLException se) {
597            throw new PersistenceDatabaseException(se);
598        } finally {
599            if(_rs != null) {
600                try {
601                    _rs.close();
602                } catch (SQLException se) {
603                    // do nothing
604                }
605            }
606        }
607        
608        return _entity;
609    }
610    
611    public java.util.List<UserVisit> getEntitiesFromResultSet(EntityPermission entityPermission, ResultSet rs)
612            throws PersistenceDatabaseException {
613        return getEntitiesFromResultSet(ThreadSession.currentSession(), entityPermission, rs);
614    }
615    
616    public java.util.List<UserVisit> getEntitiesFromResultSet(Session session, EntityPermission entityPermission, ResultSet rs)
617            throws PersistenceDatabaseException {
618        java.util.List<UserVisit> _result = new ArrayList<>();
619        
620        try {
621            while(rs.next()) {
622                _result.add(getEntityFromResultSet(session, entityPermission, rs));
623            }
624        } catch (SQLException se) {
625            throw new PersistenceDatabaseException(se);
626        }
627        
628        return _result;
629    }
630    
631    public UserVisit getEntityFromResultSet(EntityPermission entityPermission, ResultSet rs)
632            throws PersistenceDatabaseException {
633        return getEntityFromResultSet(ThreadSession.currentSession(), entityPermission, rs);
634    }
635    
636    public UserVisit getEntityFromResultSet(Session session, EntityPermission entityPermission, ResultSet rs)
637            throws PersistenceDatabaseException {
638        UserVisit _entity;
639        
640        try {
641            Long uvis_uservisitid = rs.getLong(UVIS_USERVISITID);
642            UserVisitPK _pk = new UserVisitPK(uvis_uservisitid);
643            
644            // See if we already have the entity in the session cache
645            _entity = (UserVisit)session.getEntity(_pk);
646            if(_entity != null) {
647                // If the requested permission is READ_WRITE, and the cached permission is
648                // READ_ONLY, then pretend that the cached object wasn't found, and create
649                // a new entity that is READ_WRITE.
650                if(entityPermission.equals(EntityPermission.READ_WRITE)) {
651                    if(_entity.getEntityPermission().equals(EntityPermission.READ_ONLY))
652                        _entity = null;
653                }
654            }
655            boolean foundInSessionCache = _entity != null;
656            
657            if(_entity == null && entityPermission.equals(EntityPermission.READ_ONLY)) {
658                _entity = getEntityFromCache(session, _pk);
659            }
660            
661            if(_entity == null) {
662                Long uvis_uvisgrp_uservisitgroupid = rs.getLong(UVIS_UVISGRP_USERVISITGROUPID);
663                if(rs.wasNull())
664                    uvis_uvisgrp_uservisitgroupid = null;
665                
666                Long uvis_ukey_userkeyid = rs.getLong(UVIS_UKEY_USERKEYID);
667                if(rs.wasNull())
668                    uvis_ukey_userkeyid = null;
669                
670                Long uvis_preferredlanguageid = rs.getLong(UVIS_PREFERREDLANGUAGEID);
671                if(rs.wasNull())
672                    uvis_preferredlanguageid = null;
673                
674                Long uvis_preferredcurrencyid = rs.getLong(UVIS_PREFERREDCURRENCYID);
675                if(rs.wasNull())
676                    uvis_preferredcurrencyid = null;
677                
678                Long uvis_preferredtimezoneid = rs.getLong(UVIS_PREFERREDTIMEZONEID);
679                if(rs.wasNull())
680                    uvis_preferredtimezoneid = null;
681                
682                Long uvis_preferreddatetimeformatid = rs.getLong(UVIS_PREFERREDDATETIMEFORMATID);
683                if(rs.wasNull())
684                    uvis_preferreddatetimeformatid = null;
685                
686                Long uvis_lastcommandtime = rs.getLong(UVIS_LASTCOMMANDTIME);
687                if(rs.wasNull())
688                    uvis_lastcommandtime = null;
689                
690                Long uvis_ofruse_offeruseid = rs.getLong(UVIS_OFRUSE_OFFERUSEID);
691                if(rs.wasNull())
692                    uvis_ofruse_offeruseid = null;
693                
694                Long uvis_ascrfr_associatereferralid = rs.getLong(UVIS_ASCRFR_ASSOCIATEREFERRALID);
695                if(rs.wasNull())
696                    uvis_ascrfr_associatereferralid = null;
697                
698                Long uvis_retainuntiltime = rs.getLong(UVIS_RETAINUNTILTIME);
699                if(rs.wasNull())
700                    uvis_retainuntiltime = null;
701                
702                Long uvis_fromtime = rs.getLong(UVIS_FROMTIME);
703                if(rs.wasNull())
704                    uvis_fromtime = null;
705                
706                Long uvis_thrutime = rs.getLong(UVIS_THRUTIME);
707                if(rs.wasNull())
708                    uvis_thrutime = null;
709                
710                UserVisitValue _value = new UserVisitValue(_pk, uvis_uvisgrp_uservisitgroupid == null? null: new UserVisitGroupPK(uvis_uvisgrp_uservisitgroupid), uvis_ukey_userkeyid == null? null: new UserKeyPK(uvis_ukey_userkeyid), uvis_preferredlanguageid == null? null: new LanguagePK(uvis_preferredlanguageid), uvis_preferredcurrencyid == null? null: new CurrencyPK(uvis_preferredcurrencyid), uvis_preferredtimezoneid == null? null: new TimeZonePK(uvis_preferredtimezoneid), uvis_preferreddatetimeformatid == null? null: new DateTimeFormatPK(uvis_preferreddatetimeformatid), uvis_lastcommandtime, uvis_ofruse_offeruseid == null? null: new OfferUsePK(uvis_ofruse_offeruseid), uvis_ascrfr_associatereferralid == null? null: new AssociateReferralPK(uvis_ascrfr_associatereferralid), uvis_retainuntiltime, uvis_fromtime, uvis_thrutime);
711                _entity = new UserVisit(_value, entityPermission);
712            }
713            
714            if(!foundInSessionCache) {
715                if(entityPermission.equals(EntityPermission.READ_ONLY)) {
716                    session.putReadOnlyEntity(_pk, _entity);
717                    session.getValueCache().put(_entity.getUserVisitValue());
718                } else {
719                    session.putReadWriteEntity(_pk, _entity);
720                }
721            }
722        } catch (SQLException se) {
723            throw new PersistenceDatabaseException(se);
724        }
725        
726        return _entity;
727    }
728    
729    public UserVisit create(Session session, UserVisitGroup userVisitGroup, UserKey userKey, Language preferredLanguage, Currency preferredCurrency, TimeZone preferredTimeZone, DateTimeFormat preferredDateTimeFormat, Long lastCommandTime, OfferUse offerUse, AssociateReferral associateReferral, Long retainUntilTime, Long fromTime, Long thruTime)
730            throws PersistenceDatabaseException, PersistenceNotNullException {
731        return create(session, userVisitGroup == null ? null : userVisitGroup.getPrimaryKey(), userKey == null ? null : userKey.getPrimaryKey(), preferredLanguage == null ? null : preferredLanguage.getPrimaryKey(), preferredCurrency == null ? null : preferredCurrency.getPrimaryKey(), preferredTimeZone == null ? null : preferredTimeZone.getPrimaryKey(), preferredDateTimeFormat == null ? null : preferredDateTimeFormat.getPrimaryKey(), lastCommandTime, offerUse == null ? null : offerUse.getPrimaryKey(), associateReferral == null ? null : associateReferral.getPrimaryKey(), retainUntilTime, fromTime, thruTime);
732    }
733    
734    public UserVisit create(UserVisitGroup userVisitGroup, UserKey userKey, Language preferredLanguage, Currency preferredCurrency, TimeZone preferredTimeZone, DateTimeFormat preferredDateTimeFormat, Long lastCommandTime, OfferUse offerUse, AssociateReferral associateReferral, Long retainUntilTime, Long fromTime, Long thruTime)
735            throws PersistenceDatabaseException, PersistenceNotNullException {
736        return create(ThreadSession.currentSession(), userVisitGroup == null ? null : userVisitGroup.getPrimaryKey(), userKey == null ? null : userKey.getPrimaryKey(), preferredLanguage == null ? null : preferredLanguage.getPrimaryKey(), preferredCurrency == null ? null : preferredCurrency.getPrimaryKey(), preferredTimeZone == null ? null : preferredTimeZone.getPrimaryKey(), preferredDateTimeFormat == null ? null : preferredDateTimeFormat.getPrimaryKey(), lastCommandTime, offerUse == null ? null : offerUse.getPrimaryKey(), associateReferral == null ? null : associateReferral.getPrimaryKey(), retainUntilTime, fromTime, thruTime);
737    }
738    
739    private void bindForCreate(PreparedStatement _ps, UserVisitValue _value)
740            throws SQLException {
741        _ps.setLong(1, _value.getEntityId());
742        
743        UserVisitGroupPK uvis_uvisgrp_uservisitgroupid = _value.getUserVisitGroupPK();
744        if(uvis_uvisgrp_uservisitgroupid == null)
745            _ps.setNull(2, Types.BIGINT);
746        else
747            _ps.setLong(2, uvis_uvisgrp_uservisitgroupid.getEntityId());
748            
749        UserKeyPK uvis_ukey_userkeyid = _value.getUserKeyPK();
750        if(uvis_ukey_userkeyid == null)
751            _ps.setNull(3, Types.BIGINT);
752        else
753            _ps.setLong(3, uvis_ukey_userkeyid.getEntityId());
754            
755        LanguagePK uvis_preferredlanguageid = _value.getPreferredLanguagePK();
756        if(uvis_preferredlanguageid == null)
757            _ps.setNull(4, Types.BIGINT);
758        else
759            _ps.setLong(4, uvis_preferredlanguageid.getEntityId());
760            
761        CurrencyPK uvis_preferredcurrencyid = _value.getPreferredCurrencyPK();
762        if(uvis_preferredcurrencyid == null)
763            _ps.setNull(5, Types.BIGINT);
764        else
765            _ps.setLong(5, uvis_preferredcurrencyid.getEntityId());
766            
767        TimeZonePK uvis_preferredtimezoneid = _value.getPreferredTimeZonePK();
768        if(uvis_preferredtimezoneid == null)
769            _ps.setNull(6, Types.BIGINT);
770        else
771            _ps.setLong(6, uvis_preferredtimezoneid.getEntityId());
772            
773        DateTimeFormatPK uvis_preferreddatetimeformatid = _value.getPreferredDateTimeFormatPK();
774        if(uvis_preferreddatetimeformatid == null)
775            _ps.setNull(7, Types.BIGINT);
776        else
777            _ps.setLong(7, uvis_preferreddatetimeformatid.getEntityId());
778            
779        Long uvis_lastcommandtime = _value.getLastCommandTime();
780        if(uvis_lastcommandtime == null)
781            _ps.setNull(8, Types.BIGINT);
782        else
783            _ps.setLong(8, uvis_lastcommandtime);
784            
785        OfferUsePK uvis_ofruse_offeruseid = _value.getOfferUsePK();
786        if(uvis_ofruse_offeruseid == null)
787            _ps.setNull(9, Types.BIGINT);
788        else
789            _ps.setLong(9, uvis_ofruse_offeruseid.getEntityId());
790            
791        AssociateReferralPK uvis_ascrfr_associatereferralid = _value.getAssociateReferralPK();
792        if(uvis_ascrfr_associatereferralid == null)
793            _ps.setNull(10, Types.BIGINT);
794        else
795            _ps.setLong(10, uvis_ascrfr_associatereferralid.getEntityId());
796            
797        Long uvis_retainuntiltime = _value.getRetainUntilTime();
798        if(uvis_retainuntiltime == null)
799            _ps.setNull(11, Types.BIGINT);
800        else
801            _ps.setLong(11, uvis_retainuntiltime);
802            
803        Long uvis_fromtime = _value.getFromTime();
804        if(uvis_fromtime == null)
805            _ps.setNull(12, Types.BIGINT);
806        else
807            _ps.setLong(12, uvis_fromtime);
808            
809        Long uvis_thrutime = _value.getThruTime();
810        if(uvis_thrutime == null)
811            _ps.setNull(13, Types.BIGINT);
812        else
813            _ps.setLong(13, uvis_thrutime);
814            
815    }
816    
817    public UserVisit create(Session session, UserVisitGroupPK userVisitGroupPK, UserKeyPK userKeyPK, LanguagePK preferredLanguagePK, CurrencyPK preferredCurrencyPK, TimeZonePK preferredTimeZonePK, DateTimeFormatPK preferredDateTimeFormatPK, Long lastCommandTime, OfferUsePK offerUsePK, AssociateReferralPK associateReferralPK, Long retainUntilTime, Long fromTime, Long thruTime)
818            throws PersistenceDatabaseException, PersistenceNotNullException {
819        UserVisitPK _pk = getNextPK();
820        UserVisitValue _value = new UserVisitValue(_pk, userVisitGroupPK, userKeyPK, preferredLanguagePK, preferredCurrencyPK, preferredTimeZonePK, preferredDateTimeFormatPK, lastCommandTime, offerUsePK, associateReferralPK, retainUntilTime, fromTime, thruTime);
821        
822        PreparedStatement _ps = session.prepareStatement(SQL_INSERT);
823        
824        try {
825            bindForCreate(_ps, _value);
826            
827            if(PersistenceDebugFlags.CheckEntityInsertRowCount) {
828                int _count = _ps.executeUpdate();
829                
830                if(_count != 1) {
831                    throw new PersistenceDatabaseUpdateException("insert failed, _count = " + _count);
832                }
833            } else {
834                 _ps.executeUpdate();
835            }
836            
837            session.getValueCache().put(_value);
838        } catch (SQLException se) {
839            throw new PersistenceDatabaseException(se);
840        }
841        
842        UserVisit _entity = new UserVisit(_value, EntityPermission.READ_ONLY);
843        session.putReadOnlyEntity(_pk, _entity);
844        
845        return _entity;
846    }
847    
848    public UserVisit create(UserVisitGroupPK userVisitGroupPK, UserKeyPK userKeyPK, LanguagePK preferredLanguagePK, CurrencyPK preferredCurrencyPK, TimeZonePK preferredTimeZonePK, DateTimeFormatPK preferredDateTimeFormatPK, Long lastCommandTime, OfferUsePK offerUsePK, AssociateReferralPK associateReferralPK, Long retainUntilTime, Long fromTime, Long thruTime)
849            throws PersistenceDatabaseException, PersistenceNotNullException {
850        return create(ThreadSession.currentSession(), userVisitGroupPK, userKeyPK, preferredLanguagePK, preferredCurrencyPK, preferredTimeZonePK, preferredDateTimeFormatPK, lastCommandTime, offerUsePK, associateReferralPK, retainUntilTime, fromTime, thruTime);
851    }
852    
853    public void create(Session session, Collection<UserVisitValue> _values)
854            throws PersistenceDatabaseException, PersistenceNotNullException {
855        int _size = _values.size();
856        
857        if(_size > 0) {
858            PreparedStatement _ps = session.prepareStatement(SQL_INSERT);
859            List<UserVisitValue> _cacheValues = new ArrayList<>(_size);
860            
861            try {
862                for(UserVisitValue _value : _values) {
863                    _value.setEntityId(entityIdGenerator.getNextEntityId());
864                    bindForCreate(_ps, _value);
865                    
866                    _ps.addBatch();
867                    
868                    _cacheValues.add(_value);
869                }
870                
871                if(PersistenceDebugFlags.CheckEntityInsertRowCount) {
872                    int[] _counts = _ps.executeBatch();
873                    
874                    for(int _countOffset = 0 ; _countOffset < _size ; _countOffset++) {
875                        if(_counts[_countOffset] != 1 && _counts[_countOffset] != PreparedStatement.SUCCESS_NO_INFO) {
876                            throw new PersistenceDatabaseUpdateException("batch insert failed, _counts[" + _countOffset + "] = " + _counts[_countOffset]);
877                        }
878                    }
879                } else {
880                     _ps.executeBatch();
881                }
882                
883                _ps.clearBatch();
884            } catch (SQLException se) {
885                throw new PersistenceDatabaseException(se);
886            }
887            
888            _cacheValues.forEach((_cacheValue) -> {
889                UserVisit _cacheEntity = new UserVisit(_cacheValue, EntityPermission.READ_ONLY);
890                
891                session.putReadOnlyEntity(_cacheValue.getPrimaryKey(), _cacheEntity);
892            });
893        }
894    }
895    
896    public void create(Collection<UserVisitValue> _values)
897            throws PersistenceDatabaseException, PersistenceNotNullException {
898        create(ThreadSession.currentSession(), _values);
899    }
900    
901    private boolean bindForStore(PreparedStatement _ps, UserVisitValue _value)
902            throws SQLException {
903        boolean _hasBeenModified = _value.hasBeenModified();
904        
905        if(_hasBeenModified) {
906            UserVisitGroupPK uvis_uvisgrp_uservisitgroupid = _value.getUserVisitGroupPK();
907            if(uvis_uvisgrp_uservisitgroupid == null)
908                _ps.setNull(1, Types.BIGINT);
909            else
910                _ps.setLong(1, uvis_uvisgrp_uservisitgroupid.getEntityId());
911            
912            UserKeyPK uvis_ukey_userkeyid = _value.getUserKeyPK();
913            if(uvis_ukey_userkeyid == null)
914                _ps.setNull(2, Types.BIGINT);
915            else
916                _ps.setLong(2, uvis_ukey_userkeyid.getEntityId());
917            
918            LanguagePK uvis_preferredlanguageid = _value.getPreferredLanguagePK();
919            if(uvis_preferredlanguageid == null)
920                _ps.setNull(3, Types.BIGINT);
921            else
922                _ps.setLong(3, uvis_preferredlanguageid.getEntityId());
923            
924            CurrencyPK uvis_preferredcurrencyid = _value.getPreferredCurrencyPK();
925            if(uvis_preferredcurrencyid == null)
926                _ps.setNull(4, Types.BIGINT);
927            else
928                _ps.setLong(4, uvis_preferredcurrencyid.getEntityId());
929            
930            TimeZonePK uvis_preferredtimezoneid = _value.getPreferredTimeZonePK();
931            if(uvis_preferredtimezoneid == null)
932                _ps.setNull(5, Types.BIGINT);
933            else
934                _ps.setLong(5, uvis_preferredtimezoneid.getEntityId());
935            
936            DateTimeFormatPK uvis_preferreddatetimeformatid = _value.getPreferredDateTimeFormatPK();
937            if(uvis_preferreddatetimeformatid == null)
938                _ps.setNull(6, Types.BIGINT);
939            else
940                _ps.setLong(6, uvis_preferreddatetimeformatid.getEntityId());
941            
942            Long uvis_lastcommandtime = _value.getLastCommandTime();
943            if(uvis_lastcommandtime == null)
944                _ps.setNull(7, Types.BIGINT);
945            else
946                _ps.setLong(7, uvis_lastcommandtime);
947            
948            OfferUsePK uvis_ofruse_offeruseid = _value.getOfferUsePK();
949            if(uvis_ofruse_offeruseid == null)
950                _ps.setNull(8, Types.BIGINT);
951            else
952                _ps.setLong(8, uvis_ofruse_offeruseid.getEntityId());
953            
954            AssociateReferralPK uvis_ascrfr_associatereferralid = _value.getAssociateReferralPK();
955            if(uvis_ascrfr_associatereferralid == null)
956                _ps.setNull(9, Types.BIGINT);
957            else
958                _ps.setLong(9, uvis_ascrfr_associatereferralid.getEntityId());
959            
960            Long uvis_retainuntiltime = _value.getRetainUntilTime();
961            if(uvis_retainuntiltime == null)
962                _ps.setNull(10, Types.BIGINT);
963            else
964                _ps.setLong(10, uvis_retainuntiltime);
965            
966            Long uvis_fromtime = _value.getFromTime();
967            if(uvis_fromtime == null)
968                _ps.setNull(11, Types.BIGINT);
969            else
970                _ps.setLong(11, uvis_fromtime);
971            
972            Long uvis_thrutime = _value.getThruTime();
973            if(uvis_thrutime == null)
974                _ps.setNull(12, Types.BIGINT);
975            else
976                _ps.setLong(12, uvis_thrutime);
977            
978            _ps.setLong(13, _value.getPrimaryKey().getEntityId());
979            
980            _value.clearHasBeenModified();
981        }
982        
983        return _hasBeenModified;
984    }
985    
986    @Override
987    public void store(Session session, UserVisit entity)
988            throws PersistenceDatabaseException {
989        PreparedStatement _ps = session.prepareStatement(SQL_UPDATE);
990        
991        try {
992            UserVisitValue _value = entity.getUserVisitValue();
993            
994            if(bindForStore(_ps, _value)) {
995                if(PersistenceDebugFlags.CheckEntityUpdateRowCount) {
996                    int _count = _ps.executeUpdate();
997                    
998                    if(_count != 1) {
999                        throw new PersistenceDatabaseUpdateException("update failed, _count = " + _count);
1000                    }
1001                } else {
1002                     _ps.executeUpdate();
1003                }
1004                
1005                session.getValueCache().put(_value);
1006            }
1007        } catch (SQLException se) {
1008            throw new PersistenceDatabaseException(se);
1009        }
1010    }
1011    
1012    @Override
1013    public void store(Session session, Collection<UserVisit> entities)
1014            throws PersistenceDatabaseException {
1015        if(entities.size() > 0) {
1016            PreparedStatement _ps = session.prepareStatement(SQL_UPDATE);
1017            int _modifiedEntities = 0;
1018            
1019            try {
1020                for(UserVisit entity : entities) {
1021                    if(bindForStore(_ps, entity.getUserVisitValue())) {
1022                        _ps.addBatch();
1023                        _modifiedEntities++;
1024                    }
1025                }
1026                
1027                if(_modifiedEntities != 0) {
1028                    if(PersistenceDebugFlags.CheckEntityUpdateRowCount) {
1029                        int[] _counts = _ps.executeBatch();
1030                        
1031                        for(int _countOffset = 0 ; _countOffset < _modifiedEntities  ; _countOffset++) {
1032                            if(_counts[_countOffset] != 1 && _counts[_countOffset] != PreparedStatement.SUCCESS_NO_INFO) {
1033                                throw new PersistenceDatabaseUpdateException("batch update failed, _counts[" + _countOffset + "] = " + _counts[_countOffset]);
1034                            }
1035                        }
1036                    } else {
1037                         _ps.executeBatch();
1038                    }
1039                    
1040                    _ps.clearBatch();
1041                    
1042                    entities.forEach((entity) -> {
1043                        session.getValueCache().put(entity.getUserVisitValue());
1044                    });
1045                }
1046            } catch (SQLException se) {
1047                throw new PersistenceDatabaseException(se);
1048            }
1049        }
1050    }
1051    
1052    @Override
1053    public void store(Collection<UserVisit> entities)
1054            throws PersistenceDatabaseException {
1055        store(ThreadSession.currentSession(), entities);
1056    }
1057    
1058    @Override
1059    public void remove(Session session, UserVisit entity)
1060            throws PersistenceDatabaseException {
1061        remove(session, entity.getPrimaryKey());
1062    }
1063    
1064    @Override
1065    public void remove(Session session, UserVisitPK pk)
1066            throws PersistenceDatabaseException {
1067        PreparedStatement _ps = session.prepareStatement(SQL_DELETE);
1068        long _entityId = pk.getEntityId();
1069        
1070        try {
1071            _ps.setLong(1, _entityId);
1072            
1073            if(PersistenceDebugFlags.CheckEntityDeleteRowCount) {
1074                int _count = _ps.executeUpdate();
1075                
1076                if(_count != 1) {
1077                    throw new PersistenceDatabaseUpdateException("remove failed, _count = " + _count);
1078                }
1079            } else {
1080                 _ps.executeUpdate();
1081            }
1082            
1083            session.getValueCache().remove(pk);
1084        } catch (SQLException se) {
1085            throw new PersistenceDatabaseException(se);
1086        }
1087        
1088        session.removed(pk, false);
1089    }
1090    
1091    @Override
1092    public void remove(Session session, Collection<UserVisitPK> pks)
1093            throws PersistenceDatabaseException {
1094        if(pks.size() > 0) {
1095            PreparedStatement _ps = session.prepareStatement(SQL_DELETE);
1096            int _modifiedEntities = 0;
1097            
1098            try {
1099                for(UserVisitPK pk : pks) {
1100                    long _entityId = pk.getEntityId();
1101                    
1102                    _ps.setLong(1, _entityId);
1103                    
1104                    _ps.addBatch();
1105                    _modifiedEntities++;
1106                }
1107                
1108                if(_modifiedEntities != 0) {
1109                    if(PersistenceDebugFlags.CheckEntityDeleteRowCount) {
1110                        int[] _counts = _ps.executeBatch();
1111                        
1112                        for(int _countOffset = 0 ; _countOffset < _modifiedEntities  ; _countOffset++) {
1113                            if(_counts[_countOffset] != 1 && _counts[_countOffset] != PreparedStatement.SUCCESS_NO_INFO) {
1114                                throw new PersistenceDatabaseUpdateException("batch remove failed, _counts[" + _countOffset + "] = " + _counts[_countOffset]);
1115                            }
1116                        }
1117                    } else {
1118                        _ps.executeBatch();
1119                    }
1120                    
1121                    _ps.clearBatch();
1122                    
1123                    pks.forEach((pk) -> {
1124                        session.getValueCache().remove(pk);
1125                    });
1126                }
1127            } catch (SQLException se) {
1128                throw new PersistenceDatabaseException(se);
1129            }
1130            
1131            pks.forEach((pk) -> {
1132                session.removed(pk, true);
1133            });
1134        }
1135    }
1136    
1137    @Override
1138    public void remove(Collection<UserVisitPK> pks)
1139            throws PersistenceDatabaseException {
1140        remove(ThreadSession.currentSession(), pks);
1141    }
1142    
1143    @Override
1144    public boolean validPK(Session session, UserVisitPK pk)
1145            throws PersistenceDatabaseException {
1146        boolean valid = false;
1147        PreparedStatement _ps = session.prepareStatement(SQL_VALID);
1148        ResultSet _rs = null;
1149        
1150        try {
1151            _ps.setLong(1, pk.getEntityId());
1152            
1153            _rs = _ps.executeQuery();
1154            if(_rs.next()) {
1155                long _count = _rs.getLong(1);
1156                if(_rs.wasNull())
1157                    _count = 0;
1158                
1159                if(_count == 1)
1160                    valid = true;
1161            }
1162        } catch (SQLException se) {
1163            throw new PersistenceDatabaseException(se);
1164        } finally {
1165            if(_rs != null) {
1166                try {
1167                    _rs.close();
1168                } catch (SQLException se) {
1169                    // do nothing
1170                }
1171            }
1172        }
1173        
1174        return valid;
1175    }
1176    
1177}