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 * UserVisitSearchFactory.java
021 */
022
023package com.echothree.model.data.search.server.factory;
024
025import com.echothree.model.data.user.common.pk.UserVisitPK;
026import com.echothree.model.data.search.common.pk.SearchTypePK;
027import com.echothree.model.data.search.common.pk.SearchPK;
028
029import com.echothree.model.data.user.server.entity.UserVisit;
030import com.echothree.model.data.search.server.entity.SearchType;
031import com.echothree.model.data.search.server.entity.Search;
032
033import com.echothree.model.data.search.common.UserVisitSearchConstants;
034import com.echothree.model.data.search.common.pk.UserVisitSearchPK;
035import com.echothree.model.data.search.server.value.UserVisitSearchValue;
036import com.echothree.model.data.search.server.entity.UserVisitSearch;
037import com.echothree.util.common.exception.PersistenceDatabaseException;
038import com.echothree.util.common.exception.PersistenceDatabaseUpdateException;
039import com.echothree.util.common.exception.PersistenceNotNullException;
040import com.echothree.util.server.persistence.BaseFactory;
041import com.echothree.util.server.persistence.EntityIdGenerator;
042import com.echothree.util.server.persistence.EntityPermission;
043import com.echothree.util.server.persistence.PersistenceDebugFlags;
044import com.echothree.util.server.persistence.Session;
045import com.echothree.util.server.persistence.ThreadSession;
046import java.sql.PreparedStatement;
047import java.sql.ResultSet;
048import java.sql.SQLException;
049import java.sql.Types;
050import java.io.ByteArrayInputStream;
051import java.io.StringReader;
052import java.util.ArrayList;
053import java.util.Collection;
054import java.util.HashSet;
055import java.util.List;
056import java.util.Map;
057import java.util.Set;
058import javax.enterprise.context.ApplicationScoped;
059import javax.enterprise.inject.spi.CDI;
060import org.apache.commons.logging.Log;
061import org.apache.commons.logging.LogFactory;
062
063@ApplicationScoped
064public class UserVisitSearchFactory
065        implements BaseFactory<UserVisitSearchPK, UserVisitSearch> {
066    
067    //final private static Log log = LogFactory.getLog(UserVisitSearchFactory.class);
068    
069    final private static String SQL_SELECT_READ_ONLY = "SELECT uvissrch_uservisitsearchid, uvissrch_uvis_uservisitid, uvissrch_srchtyp_searchtypeid, uvissrch_srch_searchid FROM uservisitsearches WHERE uvissrch_uservisitsearchid = ?";
070    final private static String SQL_SELECT_READ_WRITE = "SELECT uvissrch_uservisitsearchid, uvissrch_uvis_uservisitid, uvissrch_srchtyp_searchtypeid, uvissrch_srch_searchid FROM uservisitsearches WHERE uvissrch_uservisitsearchid = ? FOR UPDATE";
071    final private static String SQL_INSERT = "INSERT INTO uservisitsearches (uvissrch_uservisitsearchid, uvissrch_uvis_uservisitid, uvissrch_srchtyp_searchtypeid, uvissrch_srch_searchid) VALUES (?, ?, ?, ?)";
072    final private static String SQL_UPDATE = "UPDATE uservisitsearches SET uvissrch_uvis_uservisitid = ?, uvissrch_srchtyp_searchtypeid = ?, uvissrch_srch_searchid = ? WHERE uvissrch_uservisitsearchid = ?";
073    final private static String SQL_DELETE = "DELETE FROM uservisitsearches WHERE uvissrch_uservisitsearchid = ?";
074    final private static String SQL_VALID = "SELECT COUNT(*) FROM uservisitsearches WHERE uvissrch_uservisitsearchid = ?";
075    
076    final private static String PK_COLUMN = "uvissrch_uservisitsearchid";
077    final private static String ALL_COLUMNS = "uvissrch_uservisitsearchid, uvissrch_uvis_uservisitid, uvissrch_srchtyp_searchtypeid, uvissrch_srch_searchid";
078    final public static String TABLE_NAME = "uservisitsearches";
079    
080    final public static String UVISSRCH_USERVISITSEARCHID = "uvissrch_uservisitsearchid";
081    final public static String UVISSRCH_UVIS_USERVISITID = "uvissrch_uvis_uservisitid";
082    final public static String UVISSRCH_SRCHTYP_SEARCHTYPEID = "uvissrch_srchtyp_searchtypeid";
083    final public static String UVISSRCH_SRCH_SEARCHID = "uvissrch_srch_searchid";
084    
085    final private static EntityIdGenerator entityIdGenerator = new EntityIdGenerator(UserVisitSearchConstants.COMPONENT_VENDOR_NAME, UserVisitSearchConstants.ENTITY_TYPE_NAME);
086    
087    /** Creates a new instance of UserVisitSearchFactory */
088    protected UserVisitSearchFactory() {
089        super();
090    }
091    
092    public static UserVisitSearchFactory getInstance() {
093        return CDI.current().select(UserVisitSearchFactory.class).get();
094    }
095    
096    @Override
097    public String getPKColumn() {
098        return PK_COLUMN;
099    }
100    
101    @Override
102    public String getAllColumns() {
103        return ALL_COLUMNS;
104    }
105    
106    @Override
107    public String getTableName() {
108        return TABLE_NAME;
109    }
110    
111    @Override
112    public String getComponentVendorName() {
113        return UserVisitSearchConstants.COMPONENT_VENDOR_NAME;
114    }
115    
116    @Override
117    public String getEntityTypeName() {
118        return UserVisitSearchConstants.ENTITY_TYPE_NAME;
119    }
120    
121    public PreparedStatement prepareStatement(String query) {
122        return ThreadSession.currentSession().prepareStatement(UserVisitSearchFactory.class, query);
123    }
124    
125    public UserVisitSearchPK getNextPK() {
126        return new UserVisitSearchPK(entityIdGenerator.getNextEntityId());
127    }
128    
129    public Set<UserVisitSearchPK> getPKsFromResultSetAsSet(ResultSet rs)
130            throws PersistenceDatabaseException {
131        Set<UserVisitSearchPK> _result = new HashSet<>();
132        
133        try {
134            while(rs.next()) {
135                _result.add(getPKFromResultSet(rs));
136            }
137        } catch (SQLException se) {
138            throw new PersistenceDatabaseException(se);
139        }
140        
141        return _result;
142    }
143    
144    public java.util.List<UserVisitSearchPK> getPKsFromResultSetAsList(ResultSet rs)
145            throws PersistenceDatabaseException {
146        java.util.List<UserVisitSearchPK> _result = new ArrayList<>();
147        
148        try {
149            while(rs.next()) {
150                _result.add(getPKFromResultSet(rs));
151            }
152        } catch (SQLException se) {
153            throw new PersistenceDatabaseException(se);
154        }
155        
156        return _result;
157    }
158    
159    public UserVisitSearchPK getPKFromResultSet(ResultSet rs)
160            throws PersistenceDatabaseException {
161        UserVisitSearchPK _result;
162        
163        try {
164            long uvissrch_uservisitsearchid = rs.getLong(UVISSRCH_USERVISITSEARCHID);
165            Long _entityId = rs.wasNull() ? null : uvissrch_uservisitsearchid;
166            
167            _result = new UserVisitSearchPK(_entityId);
168        } catch (SQLException se) {
169            throw new PersistenceDatabaseException(se);
170        }
171        
172        return _result;
173    }
174    
175    public java.util.List<UserVisitSearchValue> getValuesFromPKs(Session session, Collection<UserVisitSearchPK> pks)
176            throws PersistenceDatabaseException {
177        java.util.List<UserVisitSearchValue> _values = new ArrayList<>(pks.size());
178        
179        for(UserVisitSearchPK _pk: pks) {
180            _values.add(getValueFromPK(session, _pk));
181        }
182        
183        return _values;
184    }
185    
186    public UserVisitSearchValue getValueFromPK(Session session, UserVisitSearchPK pk)
187            throws PersistenceDatabaseException {
188        UserVisitSearchValue _value;
189        
190        // See if we already have the entity in the session cache
191        UserVisitSearch _entity = (UserVisitSearch)session.getEntity(pk);
192        if(_entity == null)
193            _value = getEntityFromPK(session, EntityPermission.READ_ONLY, pk).getUserVisitSearchValue();
194        else
195            _value = _entity.getUserVisitSearchValue();
196        
197        return _value;
198    }
199    
200    public java.util.List<UserVisitSearchValue> getValuesFromResultSet(Session session, ResultSet rs)
201            throws PersistenceDatabaseException {
202        java.util.List<UserVisitSearchValue> _result = new ArrayList<>();
203        
204        try {
205            while(rs.next()) {
206                _result.add(getValueFromResultSet(session, rs));
207            }
208        } catch (SQLException se) {
209            throw new PersistenceDatabaseException(se);
210        }
211        
212        return _result;
213    }
214    
215    public UserVisitSearchValue getValueFromResultSet(Session session, ResultSet rs)
216            throws PersistenceDatabaseException {
217        UserVisitSearchValue _value;
218        
219        try {
220            Long uvissrch_uservisitsearchid = rs.getLong(UVISSRCH_USERVISITSEARCHID);
221            UserVisitSearchPK _pk = new UserVisitSearchPK(uvissrch_uservisitsearchid);
222            
223            // See if we already have the entity in the session cache
224            UserVisitSearch _entity = (UserVisitSearch)session.getEntity(_pk);
225            
226            if(_entity == null) {
227                Long uvissrch_uvis_uservisitid = rs.getLong(UVISSRCH_UVIS_USERVISITID);
228                if(rs.wasNull())
229                    uvissrch_uvis_uservisitid = null;
230                
231                Long uvissrch_srchtyp_searchtypeid = rs.getLong(UVISSRCH_SRCHTYP_SEARCHTYPEID);
232                if(rs.wasNull())
233                    uvissrch_srchtyp_searchtypeid = null;
234                
235                Long uvissrch_srch_searchid = rs.getLong(UVISSRCH_SRCH_SEARCHID);
236                if(rs.wasNull())
237                    uvissrch_srch_searchid = null;
238                
239                _value = new UserVisitSearchValue(_pk, new UserVisitPK(uvissrch_uvis_uservisitid), new SearchTypePK(uvissrch_srchtyp_searchtypeid), new SearchPK(uvissrch_srch_searchid));
240            } else
241                _value = _entity.getUserVisitSearchValue();
242        } catch (SQLException se) {
243            throw new PersistenceDatabaseException(se);
244        }
245        
246        return _value;
247    }
248    
249    public java.util.List<UserVisitSearch> getEntitiesFromPKs(EntityPermission entityPermission, Collection<UserVisitSearchPK> pks)
250            throws PersistenceDatabaseException {
251        return getEntitiesFromPKs(ThreadSession.currentSession(), entityPermission, pks);
252    }
253    
254    public java.util.List<UserVisitSearch> getEntitiesFromPKs(Session session, EntityPermission entityPermission, Collection<UserVisitSearchPK> pks)
255            throws PersistenceDatabaseException {
256        java.util.List<UserVisitSearch> _entities = new ArrayList<>(pks.size());
257        
258        for(UserVisitSearchPK _pk: pks) {
259            _entities.add(getEntityFromPK(session, entityPermission, _pk));
260        }
261        
262        return _entities;
263    }
264    
265    public UserVisitSearch getEntityFromValue(EntityPermission entityPermission, UserVisitSearchValue value) {
266        return getEntityFromPK(ThreadSession.currentSession(), entityPermission, value.getPrimaryKey());
267    }
268    
269    public UserVisitSearch getEntityFromValue(Session session, EntityPermission entityPermission, UserVisitSearchValue value) {
270        return getEntityFromPK(session, entityPermission, value.getPrimaryKey());
271    }
272    
273    public UserVisitSearch getEntityFromPK(EntityPermission entityPermission, UserVisitSearchPK pk)
274            throws PersistenceDatabaseException {
275        return getEntityFromPK(ThreadSession.currentSession(), entityPermission, pk);
276    }
277    
278    public UserVisitSearch getEntityFromCache(Session session, UserVisitSearchPK pk) {
279        UserVisitSearchValue _value = (UserVisitSearchValue)session.getValueCache().get(pk);
280    
281        return _value == null ? null : new UserVisitSearch(_value, EntityPermission.READ_ONLY);
282    }
283    
284    public UserVisitSearch getEntityFromPK(Session session, EntityPermission entityPermission, UserVisitSearchPK pk)
285            throws PersistenceDatabaseException {
286        UserVisitSearch _entity;
287        
288        // See if we already have the entity in the session cache
289        _entity = (UserVisitSearch)session.getEntity(pk);
290        if(_entity != null) {
291            // If the requested permission is READ_WRITE, and the cached permission is
292            // READ_ONLY, then pretend that the cached object wasn't found, and create
293            // a new entity that is READ_WRITE.
294            if(entityPermission.equals(EntityPermission.READ_WRITE)) {
295                if(_entity.getEntityPermission().equals(EntityPermission.READ_ONLY))
296                    _entity = null;
297            }
298        }
299        
300        if(_entity == null && entityPermission.equals(EntityPermission.READ_ONLY)) {
301            _entity = getEntityFromCache(session, pk);
302        }
303        
304        if(_entity == null) {
305            PreparedStatement _ps = session.prepareStatement(entityPermission.equals(EntityPermission.READ_ONLY)? SQL_SELECT_READ_ONLY: SQL_SELECT_READ_WRITE);
306            long _entityId = pk.getEntityId();
307            ResultSet _rs = null;
308            
309            try {
310                _ps.setLong(1, _entityId);
311                _rs = _ps.executeQuery();
312                if(_rs.next()) {
313                    _entity = getEntityFromResultSet(session, entityPermission, _rs);
314                }
315            } catch (SQLException se) {
316                throw new PersistenceDatabaseException(se);
317            } finally {
318                if(_rs != null) {
319                    try {
320                        _rs.close();
321                    } catch (SQLException se) {
322                        // do nothing
323                    }
324                }
325            }
326        }
327        
328        return _entity;
329    }
330    
331    public Set<UserVisitSearchPK> getPKsFromQueryAsSet(PreparedStatement ps, final Object... params)
332            throws PersistenceDatabaseException {
333        Set<UserVisitSearchPK> _pks;
334        ResultSet _rs = null;
335        
336        try {
337            if(params.length != 0) {
338                Session.setQueryParams(ps, params);
339            }
340            
341            _rs = ps.executeQuery();
342            _pks = getPKsFromResultSetAsSet(_rs);
343            _rs.close();
344        } catch (SQLException se) {
345            throw new PersistenceDatabaseException(se);
346        } finally {
347            if(_rs != null) {
348                try {
349                    _rs.close();
350                } catch (SQLException se) {
351                    // do nothing
352                }
353            }
354        }
355        
356        return _pks;
357    }
358    
359    public java.util.List<UserVisitSearchPK> getPKsFromQueryAsList(PreparedStatement ps, final Object... params)
360            throws PersistenceDatabaseException {
361        java.util.List<UserVisitSearchPK> _pks;
362        ResultSet _rs = null;
363        
364        try {
365            if(params.length != 0) {
366                Session.setQueryParams(ps, params);
367            }
368            
369            _rs = ps.executeQuery();
370            _pks = getPKsFromResultSetAsList(_rs);
371            _rs.close();
372        } catch (SQLException se) {
373            throw new PersistenceDatabaseException(se);
374        } finally {
375            if(_rs != null) {
376                try {
377                    _rs.close();
378                } catch (SQLException se) {
379                    // do nothing
380                }
381            }
382        }
383        
384        return _pks;
385    }
386    
387    public UserVisitSearchPK getPKFromQuery(PreparedStatement ps, final Object... params)
388            throws PersistenceDatabaseException {
389        UserVisitSearchPK _pk = null;
390        ResultSet _rs = null;
391        
392        try {
393            if(params.length != 0) {
394                Session.setQueryParams(ps, params);
395            }
396            
397            _rs = ps.executeQuery();
398            if(_rs.next()) {
399                _pk = getPKFromResultSet(_rs);
400            }
401            _rs.close();
402        } catch (SQLException se) {
403            throw new PersistenceDatabaseException(se);
404        } finally {
405            if(_rs != null) {
406                try {
407                    _rs.close();
408                } catch (SQLException se) {
409                    // do nothing
410                }
411            }
412        }
413        
414        return _pk;
415    }
416    
417    public java.util.List<UserVisitSearch> getEntitiesFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
418            throws PersistenceDatabaseException {
419        PreparedStatement ps = session.prepareStatement(UserVisitSearchFactory.class, queryMap.get(entityPermission));
420        
421        return getEntitiesFromQuery(session, entityPermission, ps, params);
422    }
423    
424    public java.util.List<UserVisitSearch> getEntitiesFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
425            throws PersistenceDatabaseException {
426        Session session = ThreadSession.currentSession();
427        PreparedStatement ps = session.prepareStatement(UserVisitSearchFactory.class, queryMap.get(entityPermission));
428        
429        return getEntitiesFromQuery(session, entityPermission, ps, params);
430    }
431    
432    public java.util.List<UserVisitSearch> getEntitiesFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
433            throws PersistenceDatabaseException {
434        PreparedStatement ps = session.prepareStatement(UserVisitSearchFactory.class, queryMap.get(entityPermission));
435        
436        return getEntitiesFromQuery(session, entityPermission, ps);
437    }
438    
439    public java.util.List<UserVisitSearch> getEntitiesFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
440            throws PersistenceDatabaseException {
441        Session session = ThreadSession.currentSession();
442        PreparedStatement ps = session.prepareStatement(UserVisitSearchFactory.class, queryMap.get(entityPermission));
443        
444        return getEntitiesFromQuery(session, entityPermission, ps);
445    }
446    
447    public java.util.List<UserVisitSearch> getEntitiesFromQuery(EntityPermission entityPermission, PreparedStatement ps)
448            throws PersistenceDatabaseException {
449        return getEntitiesFromQuery(ThreadSession.currentSession(), entityPermission, ps);
450    }
451    
452    public java.util.List<UserVisitSearch> getEntitiesFromQuery(EntityPermission entityPermission, PreparedStatement ps, final Object... params)
453            throws PersistenceDatabaseException {
454        return getEntitiesFromQuery(ThreadSession.currentSession(), entityPermission, ps, params);
455    }
456    
457    public java.util.List<UserVisitSearch> getEntitiesFromQuery(Session session, EntityPermission entityPermission, PreparedStatement ps, final Object... params)
458            throws PersistenceDatabaseException {
459        java.util.List<UserVisitSearch> _entities;
460        ResultSet _rs = null;
461        
462        try {
463            if(params.length != 0) {
464                Session.setQueryParams(ps, params);
465            }
466            
467            _rs = ps.executeQuery();
468            _entities = getEntitiesFromResultSet(session, entityPermission, _rs);
469            _rs.close();
470        } catch (SQLException se) {
471            throw new PersistenceDatabaseException(se);
472        } finally {
473            if(_rs != null) {
474                try {
475                    _rs.close();
476                } catch (SQLException se) {
477                    // do nothing
478                }
479            }
480        }
481        
482        return _entities;
483    }
484    
485    public UserVisitSearch getEntityFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
486            throws PersistenceDatabaseException {
487        PreparedStatement ps = session.prepareStatement(UserVisitSearchFactory.class, queryMap.get(entityPermission));
488        
489        return getEntityFromQuery(session, entityPermission, ps, params);
490    }
491    
492    public UserVisitSearch getEntityFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap, final Object... params)
493            throws PersistenceDatabaseException {
494        Session session = ThreadSession.currentSession();
495        PreparedStatement ps = session.prepareStatement(UserVisitSearchFactory.class, queryMap.get(entityPermission));
496        
497        return getEntityFromQuery(session, entityPermission, ps, params);
498    }
499    
500    public UserVisitSearch getEntityFromQuery(Session session, EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
501            throws PersistenceDatabaseException {
502        PreparedStatement ps = session.prepareStatement(UserVisitSearchFactory.class, queryMap.get(entityPermission));
503        
504        return getEntityFromQuery(session, entityPermission, ps);
505    }
506    
507    public UserVisitSearch getEntityFromQuery(EntityPermission entityPermission, Map<EntityPermission, String>queryMap)
508            throws PersistenceDatabaseException {
509        Session session = ThreadSession.currentSession();
510        PreparedStatement ps = session.prepareStatement(UserVisitSearchFactory.class, queryMap.get(entityPermission));
511        
512        return getEntityFromQuery(session, entityPermission, ps);
513    }
514    
515    public UserVisitSearch getEntityFromQuery(EntityPermission entityPermission, PreparedStatement ps)
516            throws PersistenceDatabaseException {
517        return getEntityFromQuery(ThreadSession.currentSession(), entityPermission, ps);
518    }
519    
520    public UserVisitSearch getEntityFromQuery(EntityPermission entityPermission, PreparedStatement ps, final Object... params)
521            throws PersistenceDatabaseException {
522        return getEntityFromQuery(ThreadSession.currentSession(), entityPermission, ps, params);
523    }
524    
525    public UserVisitSearch getEntityFromQuery(Session session, EntityPermission entityPermission, PreparedStatement ps, final Object... params)
526            throws PersistenceDatabaseException {
527        UserVisitSearch _entity = null;
528        ResultSet _rs = null;
529        
530        try {
531            if(params.length != 0) {
532                Session.setQueryParams(ps, params);
533            }
534            
535            _rs = ps.executeQuery();
536            if(_rs.next()) {
537                _entity = getEntityFromResultSet(session, entityPermission, _rs);
538            }
539            _rs.close();
540        } catch (SQLException se) {
541            throw new PersistenceDatabaseException(se);
542        } finally {
543            if(_rs != null) {
544                try {
545                    _rs.close();
546                } catch (SQLException se) {
547                    // do nothing
548                }
549            }
550        }
551        
552        return _entity;
553    }
554    
555    public java.util.List<UserVisitSearch> getEntitiesFromResultSet(EntityPermission entityPermission, ResultSet rs)
556            throws PersistenceDatabaseException {
557        return getEntitiesFromResultSet(ThreadSession.currentSession(), entityPermission, rs);
558    }
559    
560    public java.util.List<UserVisitSearch> getEntitiesFromResultSet(Session session, EntityPermission entityPermission, ResultSet rs)
561            throws PersistenceDatabaseException {
562        java.util.List<UserVisitSearch> _result = new ArrayList<>();
563        
564        try {
565            while(rs.next()) {
566                _result.add(getEntityFromResultSet(session, entityPermission, rs));
567            }
568        } catch (SQLException se) {
569            throw new PersistenceDatabaseException(se);
570        }
571        
572        return _result;
573    }
574    
575    public UserVisitSearch getEntityFromResultSet(EntityPermission entityPermission, ResultSet rs)
576            throws PersistenceDatabaseException {
577        return getEntityFromResultSet(ThreadSession.currentSession(), entityPermission, rs);
578    }
579    
580    public UserVisitSearch getEntityFromResultSet(Session session, EntityPermission entityPermission, ResultSet rs)
581            throws PersistenceDatabaseException {
582        UserVisitSearch _entity;
583        
584        try {
585            Long uvissrch_uservisitsearchid = rs.getLong(UVISSRCH_USERVISITSEARCHID);
586            UserVisitSearchPK _pk = new UserVisitSearchPK(uvissrch_uservisitsearchid);
587            
588            // See if we already have the entity in the session cache
589            _entity = (UserVisitSearch)session.getEntity(_pk);
590            if(_entity != null) {
591                // If the requested permission is READ_WRITE, and the cached permission is
592                // READ_ONLY, then pretend that the cached object wasn't found, and create
593                // a new entity that is READ_WRITE.
594                if(entityPermission.equals(EntityPermission.READ_WRITE)) {
595                    if(_entity.getEntityPermission().equals(EntityPermission.READ_ONLY))
596                        _entity = null;
597                }
598            }
599            boolean foundInSessionCache = _entity != null;
600            
601            if(_entity == null && entityPermission.equals(EntityPermission.READ_ONLY)) {
602                _entity = getEntityFromCache(session, _pk);
603            }
604            
605            if(_entity == null) {
606                Long uvissrch_uvis_uservisitid = rs.getLong(UVISSRCH_UVIS_USERVISITID);
607                if(rs.wasNull())
608                    uvissrch_uvis_uservisitid = null;
609                
610                Long uvissrch_srchtyp_searchtypeid = rs.getLong(UVISSRCH_SRCHTYP_SEARCHTYPEID);
611                if(rs.wasNull())
612                    uvissrch_srchtyp_searchtypeid = null;
613                
614                Long uvissrch_srch_searchid = rs.getLong(UVISSRCH_SRCH_SEARCHID);
615                if(rs.wasNull())
616                    uvissrch_srch_searchid = null;
617                
618                UserVisitSearchValue _value = new UserVisitSearchValue(_pk, uvissrch_uvis_uservisitid == null? null: new UserVisitPK(uvissrch_uvis_uservisitid), uvissrch_srchtyp_searchtypeid == null? null: new SearchTypePK(uvissrch_srchtyp_searchtypeid), uvissrch_srch_searchid == null? null: new SearchPK(uvissrch_srch_searchid));
619                _entity = new UserVisitSearch(_value, entityPermission);
620            }
621            
622            if(!foundInSessionCache) {
623                if(entityPermission.equals(EntityPermission.READ_ONLY)) {
624                    session.putReadOnlyEntity(_pk, _entity);
625                    session.getValueCache().put(_entity.getUserVisitSearchValue());
626                } else {
627                    session.putReadWriteEntity(_pk, _entity);
628                }
629            }
630        } catch (SQLException se) {
631            throw new PersistenceDatabaseException(se);
632        }
633        
634        return _entity;
635    }
636    
637    public UserVisitSearch create(Session session, UserVisit userVisit, SearchType searchType, Search search)
638            throws PersistenceDatabaseException, PersistenceNotNullException {
639        return create(session, userVisit == null ? null : userVisit.getPrimaryKey(), searchType == null ? null : searchType.getPrimaryKey(), search == null ? null : search.getPrimaryKey());
640    }
641    
642    public UserVisitSearch create(UserVisit userVisit, SearchType searchType, Search search)
643            throws PersistenceDatabaseException, PersistenceNotNullException {
644        return create(ThreadSession.currentSession(), userVisit == null ? null : userVisit.getPrimaryKey(), searchType == null ? null : searchType.getPrimaryKey(), search == null ? null : search.getPrimaryKey());
645    }
646    
647    private void bindForCreate(PreparedStatement _ps, UserVisitSearchValue _value)
648            throws SQLException {
649        _ps.setLong(1, _value.getEntityId());
650        
651        UserVisitPK uvissrch_uvis_uservisitid = _value.getUserVisitPK();
652        if(uvissrch_uvis_uservisitid == null)
653            _ps.setNull(2, Types.BIGINT);
654        else
655            _ps.setLong(2, uvissrch_uvis_uservisitid.getEntityId());
656            
657        SearchTypePK uvissrch_srchtyp_searchtypeid = _value.getSearchTypePK();
658        if(uvissrch_srchtyp_searchtypeid == null)
659            _ps.setNull(3, Types.BIGINT);
660        else
661            _ps.setLong(3, uvissrch_srchtyp_searchtypeid.getEntityId());
662            
663        SearchPK uvissrch_srch_searchid = _value.getSearchPK();
664        if(uvissrch_srch_searchid == null)
665            _ps.setNull(4, Types.BIGINT);
666        else
667            _ps.setLong(4, uvissrch_srch_searchid.getEntityId());
668            
669    }
670    
671    public UserVisitSearch create(Session session, UserVisitPK userVisitPK, SearchTypePK searchTypePK, SearchPK searchPK)
672            throws PersistenceDatabaseException, PersistenceNotNullException {
673        UserVisitSearchPK _pk = getNextPK();
674        UserVisitSearchValue _value = new UserVisitSearchValue(_pk, userVisitPK, searchTypePK, searchPK);
675        
676        PreparedStatement _ps = session.prepareStatement(SQL_INSERT);
677        
678        try {
679            bindForCreate(_ps, _value);
680            
681            if(PersistenceDebugFlags.CheckEntityInsertRowCount) {
682                int _count = _ps.executeUpdate();
683                
684                if(_count != 1) {
685                    throw new PersistenceDatabaseUpdateException("insert failed, _count = " + _count);
686                }
687            } else {
688                 _ps.executeUpdate();
689            }
690            
691            session.getValueCache().put(_value);
692        } catch (SQLException se) {
693            throw new PersistenceDatabaseException(se);
694        }
695        
696        UserVisitSearch _entity = new UserVisitSearch(_value, EntityPermission.READ_ONLY);
697        session.putReadOnlyEntity(_pk, _entity);
698        
699        return _entity;
700    }
701    
702    public UserVisitSearch create(UserVisitPK userVisitPK, SearchTypePK searchTypePK, SearchPK searchPK)
703            throws PersistenceDatabaseException, PersistenceNotNullException {
704        return create(ThreadSession.currentSession(), userVisitPK, searchTypePK, searchPK);
705    }
706    
707    public void create(Session session, Collection<UserVisitSearchValue> _values)
708            throws PersistenceDatabaseException, PersistenceNotNullException {
709        int _size = _values.size();
710        
711        if(_size > 0) {
712            PreparedStatement _ps = session.prepareStatement(SQL_INSERT);
713            List<UserVisitSearchValue> _cacheValues = new ArrayList<>(_size);
714            
715            try {
716                for(UserVisitSearchValue _value : _values) {
717                    _value.setEntityId(entityIdGenerator.getNextEntityId());
718                    bindForCreate(_ps, _value);
719                    
720                    _ps.addBatch();
721                    
722                    _cacheValues.add(_value);
723                }
724                
725                if(PersistenceDebugFlags.CheckEntityInsertRowCount) {
726                    int[] _counts = _ps.executeBatch();
727                    
728                    for(int _countOffset = 0 ; _countOffset < _size ; _countOffset++) {
729                        if(_counts[_countOffset] != 1 && _counts[_countOffset] != PreparedStatement.SUCCESS_NO_INFO) {
730                            throw new PersistenceDatabaseUpdateException("batch insert failed, _counts[" + _countOffset + "] = " + _counts[_countOffset]);
731                        }
732                    }
733                } else {
734                     _ps.executeBatch();
735                }
736                
737                _ps.clearBatch();
738            } catch (SQLException se) {
739                throw new PersistenceDatabaseException(se);
740            }
741            
742            _cacheValues.forEach((_cacheValue) -> {
743                UserVisitSearch _cacheEntity = new UserVisitSearch(_cacheValue, EntityPermission.READ_ONLY);
744                
745                session.putReadOnlyEntity(_cacheValue.getPrimaryKey(), _cacheEntity);
746            });
747        }
748    }
749    
750    public void create(Collection<UserVisitSearchValue> _values)
751            throws PersistenceDatabaseException, PersistenceNotNullException {
752        create(ThreadSession.currentSession(), _values);
753    }
754    
755    private boolean bindForStore(PreparedStatement _ps, UserVisitSearchValue _value)
756            throws SQLException {
757        boolean _hasBeenModified = _value.hasBeenModified();
758        
759        if(_hasBeenModified) {
760            UserVisitPK uvissrch_uvis_uservisitid = _value.getUserVisitPK();
761            if(uvissrch_uvis_uservisitid == null)
762                _ps.setNull(1, Types.BIGINT);
763            else
764                _ps.setLong(1, uvissrch_uvis_uservisitid.getEntityId());
765            
766            SearchTypePK uvissrch_srchtyp_searchtypeid = _value.getSearchTypePK();
767            if(uvissrch_srchtyp_searchtypeid == null)
768                _ps.setNull(2, Types.BIGINT);
769            else
770                _ps.setLong(2, uvissrch_srchtyp_searchtypeid.getEntityId());
771            
772            SearchPK uvissrch_srch_searchid = _value.getSearchPK();
773            if(uvissrch_srch_searchid == null)
774                _ps.setNull(3, Types.BIGINT);
775            else
776                _ps.setLong(3, uvissrch_srch_searchid.getEntityId());
777            
778            _ps.setLong(4, _value.getPrimaryKey().getEntityId());
779            
780            _value.clearHasBeenModified();
781        }
782        
783        return _hasBeenModified;
784    }
785    
786    @Override
787    public void store(Session session, UserVisitSearch entity)
788            throws PersistenceDatabaseException {
789        PreparedStatement _ps = session.prepareStatement(SQL_UPDATE);
790        
791        try {
792            UserVisitSearchValue _value = entity.getUserVisitSearchValue();
793            
794            if(bindForStore(_ps, _value)) {
795                if(PersistenceDebugFlags.CheckEntityUpdateRowCount) {
796                    int _count = _ps.executeUpdate();
797                    
798                    if(_count != 1) {
799                        throw new PersistenceDatabaseUpdateException("update failed, _count = " + _count);
800                    }
801                } else {
802                     _ps.executeUpdate();
803                }
804                
805                session.getValueCache().put(_value);
806            }
807        } catch (SQLException se) {
808            throw new PersistenceDatabaseException(se);
809        }
810    }
811    
812    @Override
813    public void store(Session session, Collection<UserVisitSearch> entities)
814            throws PersistenceDatabaseException {
815        if(entities.size() > 0) {
816            PreparedStatement _ps = session.prepareStatement(SQL_UPDATE);
817            int _modifiedEntities = 0;
818            
819            try {
820                for(UserVisitSearch entity : entities) {
821                    if(bindForStore(_ps, entity.getUserVisitSearchValue())) {
822                        _ps.addBatch();
823                        _modifiedEntities++;
824                    }
825                }
826                
827                if(_modifiedEntities != 0) {
828                    if(PersistenceDebugFlags.CheckEntityUpdateRowCount) {
829                        int[] _counts = _ps.executeBatch();
830                        
831                        for(int _countOffset = 0 ; _countOffset < _modifiedEntities  ; _countOffset++) {
832                            if(_counts[_countOffset] != 1 && _counts[_countOffset] != PreparedStatement.SUCCESS_NO_INFO) {
833                                throw new PersistenceDatabaseUpdateException("batch update failed, _counts[" + _countOffset + "] = " + _counts[_countOffset]);
834                            }
835                        }
836                    } else {
837                         _ps.executeBatch();
838                    }
839                    
840                    _ps.clearBatch();
841                    
842                    entities.forEach((entity) -> {
843                        session.getValueCache().put(entity.getUserVisitSearchValue());
844                    });
845                }
846            } catch (SQLException se) {
847                throw new PersistenceDatabaseException(se);
848            }
849        }
850    }
851    
852    @Override
853    public void store(Collection<UserVisitSearch> entities)
854            throws PersistenceDatabaseException {
855        store(ThreadSession.currentSession(), entities);
856    }
857    
858    @Override
859    public void remove(Session session, UserVisitSearch entity)
860            throws PersistenceDatabaseException {
861        remove(session, entity.getPrimaryKey());
862    }
863    
864    @Override
865    public void remove(Session session, UserVisitSearchPK pk)
866            throws PersistenceDatabaseException {
867        PreparedStatement _ps = session.prepareStatement(SQL_DELETE);
868        long _entityId = pk.getEntityId();
869        
870        try {
871            _ps.setLong(1, _entityId);
872            
873            if(PersistenceDebugFlags.CheckEntityDeleteRowCount) {
874                int _count = _ps.executeUpdate();
875                
876                if(_count != 1) {
877                    throw new PersistenceDatabaseUpdateException("remove failed, _count = " + _count);
878                }
879            } else {
880                 _ps.executeUpdate();
881            }
882            
883            session.getValueCache().remove(pk);
884        } catch (SQLException se) {
885            throw new PersistenceDatabaseException(se);
886        }
887        
888        session.removed(pk, false);
889    }
890    
891    @Override
892    public void remove(Session session, Collection<UserVisitSearchPK> pks)
893            throws PersistenceDatabaseException {
894        if(pks.size() > 0) {
895            PreparedStatement _ps = session.prepareStatement(SQL_DELETE);
896            int _modifiedEntities = 0;
897            
898            try {
899                for(UserVisitSearchPK pk : pks) {
900                    long _entityId = pk.getEntityId();
901                    
902                    _ps.setLong(1, _entityId);
903                    
904                    _ps.addBatch();
905                    _modifiedEntities++;
906                }
907                
908                if(_modifiedEntities != 0) {
909                    if(PersistenceDebugFlags.CheckEntityDeleteRowCount) {
910                        int[] _counts = _ps.executeBatch();
911                        
912                        for(int _countOffset = 0 ; _countOffset < _modifiedEntities  ; _countOffset++) {
913                            if(_counts[_countOffset] != 1 && _counts[_countOffset] != PreparedStatement.SUCCESS_NO_INFO) {
914                                throw new PersistenceDatabaseUpdateException("batch remove failed, _counts[" + _countOffset + "] = " + _counts[_countOffset]);
915                            }
916                        }
917                    } else {
918                        _ps.executeBatch();
919                    }
920                    
921                    _ps.clearBatch();
922                    
923                    pks.forEach((pk) -> {
924                        session.getValueCache().remove(pk);
925                    });
926                }
927            } catch (SQLException se) {
928                throw new PersistenceDatabaseException(se);
929            }
930            
931            pks.forEach((pk) -> {
932                session.removed(pk, true);
933            });
934        }
935    }
936    
937    @Override
938    public void remove(Collection<UserVisitSearchPK> pks)
939            throws PersistenceDatabaseException {
940        remove(ThreadSession.currentSession(), pks);
941    }
942    
943    @Override
944    public boolean validPK(Session session, UserVisitSearchPK pk)
945            throws PersistenceDatabaseException {
946        boolean valid = false;
947        PreparedStatement _ps = session.prepareStatement(SQL_VALID);
948        ResultSet _rs = null;
949        
950        try {
951            _ps.setLong(1, pk.getEntityId());
952            
953            _rs = _ps.executeQuery();
954            if(_rs.next()) {
955                long _count = _rs.getLong(1);
956                if(_rs.wasNull())
957                    _count = 0;
958                
959                if(_count == 1)
960                    valid = true;
961            }
962        } catch (SQLException se) {
963            throw new PersistenceDatabaseException(se);
964        } finally {
965            if(_rs != null) {
966                try {
967                    _rs.close();
968                } catch (SQLException se) {
969                    // do nothing
970                }
971            }
972        }
973        
974        return valid;
975    }
976    
977}