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