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