// Path: src/main/java/io/jvoid/database/MetadataDatabase.java
// @Singleton
// public class MetadataDatabase {
// 
//     private JVoidConfiguration configuration;
// 
//     private HikariDataSource ds;
// 
//     /**
//      *
//      * @param configuration
//      */
//     @Inject
//     public MetadataDatabase(JVoidConfiguration configuration) {
//         this.configuration = configuration;
//     }
// 
//     /**
//      *
//      */
//     @Inject
//     public void startup() {
//         if (ds != null && !ds.isClosed()) {
//             return;
//         }
// 
//         HikariConfig config = new HikariConfig();
//         config.setJdbcUrl(configuration.dbUrl());
//         config.setUsername(configuration.dbUsername());
//         config.setPassword(configuration.dbPassword());
//         config.addDataSourceProperty("cachePrepStmts", "true");
//         config.addDataSourceProperty("prepStmtCacheSize", "250");
//         config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
// 
//         ds = new HikariDataSource(config);
// 
//         initializeDatabase();
//     }
// 
//     /**
//      *
//      */
//     public void shutdown() {
//         if (ds != null) {
//             ds.close();
//             ds = null;
//         }
//     }
// 
//     /**
//      *
//      */
//     private void initializeDatabase() {
//         Flyway flyway = new Flyway();
//         flyway.setDataSource(ds);
//         flyway.migrate();
//     }
// 
//     /**
//      *
//      * @return A connection from the pool
//      */
//     public Connection getConnection() {
//         try {
//             return ds.getConnection();
//         } catch (SQLException e) {
//             throw new JVoidDataAccessException(e);
//         }
//     }
// }
// 
// Path: src/main/java/io/jvoid/metadata/model/JClassConstructor.java
// @Data
// public class JClassConstructor implements JEntity<Long>, ChecksumAware {
// 
//     private Long id;
//     private String identifier;
//     private String checksum;
//     private Long classId;
//     
// }


import java.util.Map;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanMapHandler;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import io.jvoid.database.MetadataDatabase;
import io.jvoid.metadata.model.JClassConstructor;
package io.jvoid.metadata.repositories;





/**
 *
 */
@Singleton
public class ClassConstructorsRepository extends AbstractRepository<JClassConstructor, Long>
        implements TestRelatedEntityRepository<JClassConstructor, Long> {
    private ResultSetHandler<JClassConstructor> objectHandler = new BeanHandler<>(
            JClassConstructor.class);
    private ResultSetHandler<Map<String, JClassConstructor>> identifierMapHandler = new BeanMapHandler<>(
            JClassConstructor.class, "identifier");

    @Inject
    public ClassConstructorsRepository(MetadataDatabase database) {
// Path: src/main/java/io/jvoid/database/MetadataDatabase.java
// @Singleton
// public class MetadataDatabase {
// 
//     private JVoidConfiguration configuration;
// 
//     private HikariDataSource ds;
// 
//     /**
//      *
//      * @param configuration
//      */
//     @Inject
//     public MetadataDatabase(JVoidConfiguration configuration) {
//         this.configuration = configuration;
//     }
// 
//     /**
//      *
//      */
//     @Inject
//     public void startup() {
//         if (ds != null && !ds.isClosed()) {
//             return;
//         }
// 
//         HikariConfig config = new HikariConfig();
//         config.setJdbcUrl(configuration.dbUrl());
//         config.setUsername(configuration.dbUsername());
//         config.setPassword(configuration.dbPassword());
//         config.addDataSourceProperty("cachePrepStmts", "true");
//         config.addDataSourceProperty("prepStmtCacheSize", "250");
//         config.addDataSourceProperty("prepStmtCacheSqlLimit", "2048");
// 
//         ds = new HikariDataSource(config);
// 
//         initializeDatabase();
//     }
// 
//     /**
//      *
//      */
//     public void shutdown() {
//         if (ds != null) {
//             ds.close();
//             ds = null;
//         }
//     }
// 
//     /**
//      *
//      */
//     private void initializeDatabase() {
//         Flyway flyway = new Flyway();
//         flyway.setDataSource(ds);
//         flyway.migrate();
//     }
// 
//     /**
//      *
//      * @return A connection from the pool
//      */
//     public Connection getConnection() {
//         try {
//             return ds.getConnection();
//         } catch (SQLException e) {
//             throw new JVoidDataAccessException(e);
//         }
//     }
// }
// 
// Path: src/main/java/io/jvoid/metadata/model/JClassConstructor.java
// @Data
// public class JClassConstructor implements JEntity<Long>, ChecksumAware {
// 
//     private Long id;
//     private String identifier;
//     private String checksum;
//     private Long classId;
//     
// }


// Path: src/main/java/io/jvoid/metadata/repositories/ClassConstructorsRepository.java
import java.util.Map;
import org.apache.commons.dbutils.ResultSetHandler;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanMapHandler;
import com.google.inject.Inject;
import com.google.inject.Singleton;
import io.jvoid.database.MetadataDatabase;
import io.jvoid.metadata.model.JClassConstructor;

package io.jvoid.metadata.repositories;





/**
 *
 */
@Singleton
public class ClassConstructorsRepository extends AbstractRepository<JClassConstructor, Long>
        implements TestRelatedEntityRepository<JClassConstructor, Long> {
    private ResultSetHandler<JClassConstructor> objectHandler = new BeanHandler<>(
            JClassConstructor.class);
    private ResultSetHandler<Map<String, JClassConstructor>> identifierMapHandler = new BeanMapHandler<>(
            JClassConstructor.class, "identifier");

    @Inject
    public ClassConstructorsRepository(MetadataDatabase database) {
        super(database);