In my application that uses Spring and Hibernate, I parse the CSV file and populate db by calling handleRow() every time a record is read from the CSV file.
My domain model:
"Family" has many "subfamilies"
"SubFamily" has a lot of "Locus"
a “Locus” refers to “views”
Family <-> SubFamily <-> Locus - all bidirectional mappings.
code:
public void handleRow(Family dummyFamily, SubFamily dummySubFamily, Locus dummyLocus) { //Service method which access DAO layers CommonService serv = ctx.getCommonService(); boolean newFamily=false; Family family=serv.getFamilyByFamilyId(dummyFamily.getFamilyId()); if(family==null){ newFamily=true; family=new Family(); family.setFamilyId(dummyFamily.getFamilyId()); family.setFamilyIPRId(dummyFamily.getFamilyIPRId()); family.setFamilyName(dummyFamily.getFamilyName()); family.setFamilyPattern(dummyFamily.getFamilyPattern()); family.setRifID(dummyFamily.getRifID()); } SubFamily subFamily = family.getSubFamilyBySubFamilyId( dummySubFamily.getSubFamilyId() ); if(subFamily==null){ subFamily=new SubFamily(); subFamily.setRifID(dummySubFamily.getRifID()); subFamily.setSubFamilyId(dummySubFamily.getSubFamilyId()); subFamily.setSubFamilyIPRId(dummySubFamily.getSubFamilyIPRId()); subFamily.setSubFamilyName(dummySubFamily.getSubFamilyName()); subFamily.setSubFamilyPattern(dummySubFamily.getSubFamilyPattern()); family.addSubFamily(subFamily); } //use the save reference, to update from GFF handler Locus locus = dummyLocus; subFamily.addLocus(locus); assignSpecies(serv,locus); //Persist object if(newFamily){ serv.createFamily(family); } else { serv.updateFamily(family); } }
a View is assigned to the Locus using the following method, which simply accesses the DAO layer:
private void assignSpecies (CommonService serv, Locus locus) { String locusId = locus.getLocusId(); String speciesId = CommonUtils.getLocusSpecies(locusId, ctx.getSpeciesList()).getSpeciesId();
Hibernate gives the following error:
[INFO] Starting scheduled refresh cache with period [5000ms] Hibernate: insert into species (species_id, name) values (?, ?) Hibernate: insert into species (species_id, name) values (?, ?) Hibernate: insert into species (species_id, name) values (?, ?) as id1_, subfamilie0_.sub_family_index as sub8_1_, subfamilie0_.id as id0_0_, subfamilie0_.sub_family_id as sub2_0_0_, subfamilie0_.rif_iD as rif3_0_0_, subfamilie0_.sub_family_name as sub4_0_0_, subfamilie0_.sub_family_ipr_id as sub5_0_0_ [INFO] Starting scheduled refresh cache with period [5000ms] Hibernate: insert into species (species_id, name) values (?, ?) Hibernate: insert into species (species_id, name) values (?, ?) Hibernate: insert into species (species_id, name) values (?, ?) as id1_, locuslist0_.sub_family_index as sub7_1_, locuslist0_.id as id2_0_, locuslist0_.locus_id as locus2_2_0_, locuslist0_.refTrans_id as refTrans3_2_0_, locuslist0_.function as function2_0_, locuslist0_.sub_family_id as sub5_2_0_ [INFO] Starting scheduled refresh cache with period [5000ms] Hibernate: insert into species (species_id, name) values (?, ?) Hibernate: insert into species (species_id, name) values (?, ?) Hibernate: insert into species (species_id, name) values (?, ?)
Any tips?