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