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