diff --git a/src/main/java/simpaths/data/startingpop/DataParser.java b/src/main/java/simpaths/data/startingpop/DataParser.java index 4beaa3da0..c1ccdc94d 100644 --- a/src/main/java/simpaths/data/startingpop/DataParser.java +++ b/src/main/java/simpaths/data/startingpop/DataParser.java @@ -269,7 +269,11 @@ private static void parse(String inputFileLocation, String inputFileName, Connec + "ALTER TABLE " + personTable + " ADD COLUMN prid INT DEFAULT 0;" + "ALTER TABLE " + personTable + " ALTER COLUMN idhh RENAME TO idhousehold;" - //Re-order by id + + "CREATE INDEX IF NOT EXISTS idx_" + personTable + "_bukey ON " + personTable + " (buid, butime, burun, prid);" + + "CREATE INDEX IF NOT EXISTS idx_" + personTable + "_idhousehold ON " + personTable + " (idhousehold);" + + + //Re-order by id + "SELECT * FROM " + personTable + " ORDER BY id;" ); diff --git a/src/main/java/simpaths/model/SimPathsModel.java b/src/main/java/simpaths/model/SimPathsModel.java index 09e0913b9..83d963acf 100644 --- a/src/main/java/simpaths/model/SimPathsModel.java +++ b/src/main/java/simpaths/model/SimPathsModel.java @@ -3359,7 +3359,8 @@ private LifetimeIncomeImputation getLifetimeIncomes(int year) { EntityManager em = Persistence.createEntityManagerFactory("lifetime-incomes", propertyMap).createEntityManager(); txn = em.getTransaction(); txn.begin(); - String query = "SELECT DISTINCT cohort FROM BirthCohort cohort LEFT JOIN FETCH cohort.individuals individuals LEFT JOIN FETCH individuals.incomes incomes"; + String query = "SELECT DISTINCT cohort FROM BirthCohort cohort"; +// String query = "SELECT DISTINCT cohort FROM BirthCohort cohort LEFT JOIN FETCH cohort.individuals individuals LEFT JOIN FETCH individuals.incomes incomes"; System.out.println("Submitting SQL query"); log.info("Submitting SQL query: " + query); List cohorts = em.createQuery(query).getResultList(); @@ -3387,7 +3388,7 @@ private Processed getProcessed() { private Processed getProcessed(Country country, int startYear, int popSize, boolean ignoreTargetsAtPopulationLoad) { Processed processed = null; - //Processed processed_return = null; + Processed processed_return = null; EntityTransaction txn = null; try { @@ -3398,8 +3399,8 @@ private Processed getProcessed(Country country, int startYear, int popSize, bool EntityManager em = Persistence.createEntityManagerFactory("starting-population", propertyMap).createEntityManager(); txn = em.getTransaction(); txn.begin(); - String query = "SELECT DISTINCT processed FROM Processed processed LEFT JOIN FETCH processed.households households LEFT JOIN FETCH households.benefitUnits benefitUnits LEFT JOIN FETCH benefitUnits.members members WHERE processed.startYear = " + startYear + " AND processed.popSize = " + popSize + " AND processed.country = " + country + " AND processed.noTargets = " + ignoreTargetsAtPopulationLoad + " ORDER BY households.key.id"; -// String query = "SELECT processed FROM Processed processed WHERE processed.startYear = " + startYear + " AND processed.popSize = " + popSize + " AND processed.country = " + country + " AND processed.noTargets = " + ignoreTargetsAtPopulationLoad; +// String query = "SELECT DISTINCT processed FROM Processed processed LEFT JOIN FETCH processed.households households LEFT JOIN FETCH households.benefitUnits benefitUnits LEFT JOIN FETCH benefitUnits.members members WHERE processed.startYear = " + startYear + " AND processed.popSize = " + popSize + " AND processed.country = " + country + " AND processed.noTargets = " + ignoreTargetsAtPopulationLoad + " ORDER BY households.key.id"; + String query = "SELECT processed FROM Processed processed WHERE processed.startYear = " + startYear + " AND processed.popSize = " + popSize + " AND processed.country = " + country + " AND processed.noTargets = " + ignoreTargetsAtPopulationLoad; log.info("Submitting SQL query: " + query); List processedList = em.createQuery(query).getResultList(); @@ -3412,13 +3413,13 @@ private Processed getProcessed(Country country, int startYear, int popSize, bool processed.resetDependents(); // // Now fetch households for THIS specific Processed instance only -// processed_return = em.createQuery( -// "SELECT p FROM Processed p LEFT JOIN FETCH p.households h WHERE p = :proc ORDER BY h.key.id", -// Processed.class) -// .setParameter("proc", processed) -// .getSingleResult(); -// -// processed_return.resetDependents(); + processed_return = em.createQuery( + "SELECT p FROM Processed p LEFT JOIN FETCH p.households h WHERE p = :proc ORDER BY h.key.id", + Processed.class) + .setParameter("proc", processed) + .getSingleResult(); + + processed_return.resetDependents(); } // close database connection @@ -3446,8 +3447,8 @@ private List loadStartingPopulation() { EntityManager em = Persistence.createEntityManagerFactory("starting-population", propertyMap).createEntityManager(); txn = em.getTransaction(); txn.begin(); -// String query = "SELECT households FROM Household households"; - String query = "SELECT DISTINCT households FROM Household households LEFT JOIN FETCH households.benefitUnits benefitUnits LEFT JOIN FETCH benefitUnits.members members"; + String query = "SELECT households FROM Household households"; +// String query = "SELECT DISTINCT households FROM Household households LEFT JOIN FETCH households.benefitUnits benefitUnits LEFT JOIN FETCH benefitUnits.members members"; log.info("Submitting SQL query: " + query); households = em.createQuery(query).getResultList(); log.info("Query complete"); diff --git a/src/main/java/simpaths/model/lifetime_incomes/AnnualIncome.java b/src/main/java/simpaths/model/lifetime_incomes/AnnualIncome.java index 17aab57bc..4e5c099c7 100644 --- a/src/main/java/simpaths/model/lifetime_incomes/AnnualIncome.java +++ b/src/main/java/simpaths/model/lifetime_incomes/AnnualIncome.java @@ -10,7 +10,7 @@ public class AnnualIncome implements IDoubleSource { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", unique = true, nullable = false) private Long id; - @ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.REFRESH) + @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.REFRESH) @JoinColumns({ @JoinColumn(name = "individual_id", referencedColumnName = "id") }) diff --git a/src/main/java/simpaths/model/lifetime_incomes/BirthCohort.java b/src/main/java/simpaths/model/lifetime_incomes/BirthCohort.java index fc27de92f..e6e4236e9 100644 --- a/src/main/java/simpaths/model/lifetime_incomes/BirthCohort.java +++ b/src/main/java/simpaths/model/lifetime_incomes/BirthCohort.java @@ -14,7 +14,7 @@ public class BirthCohort { * ATTRIBUTES */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", unique = true, nullable = false) private Long id; - @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "cohort") + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "cohort") @OrderBy("id ASC") private Set individuals = new LinkedHashSet<>(); diff --git a/src/main/java/simpaths/model/lifetime_incomes/Individual.java b/src/main/java/simpaths/model/lifetime_incomes/Individual.java index e92b98384..29e34a036 100644 --- a/src/main/java/simpaths/model/lifetime_incomes/Individual.java +++ b/src/main/java/simpaths/model/lifetime_incomes/Individual.java @@ -20,15 +20,15 @@ public class Individual implements IDoubleSource { * ATTRIBUTES */ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Column(name = "id", unique = true, nullable = false) private Long id; - @ManyToOne(fetch = FetchType.EAGER, cascade=CascadeType.REFRESH) + @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.REFRESH) @JoinColumns({ @JoinColumn(name = "cohort_id", referencedColumnName = "id") }) private BirthCohort cohort; - @OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.ALL, mappedBy = "individual") + @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL, mappedBy = "individual") @OrderBy("id ASC") private Set incomes = new LinkedHashSet<>(); - @OneToMany(fetch = FetchType.EAGER, mappedBy = "ltIncomeDonor") + @OneToMany(fetch = FetchType.LAZY, mappedBy = "ltIncomeDonor") private Set persons = new LinkedHashSet<>(); @Transient int year;