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