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