diff --git a/gemma-core/src/main/java/ubic/gemma/model/expression/bioAssay/BioAssay.java b/gemma-core/src/main/java/ubic/gemma/model/expression/bioAssay/BioAssay.java index 592e6e0bc3..76e8652227 100644 --- a/gemma-core/src/main/java/ubic/gemma/model/expression/bioAssay/BioAssay.java +++ b/gemma-core/src/main/java/ubic/gemma/model/expression/bioAssay/BioAssay.java @@ -29,6 +29,8 @@ import javax.annotation.Nullable; import javax.persistence.Transient; import java.util.Date; +import java.util.HashSet; +import java.util.Set; /** * Represents the bringing together of a biomaterial with an assay of some sort (typically an expression assay). We @@ -67,11 +69,16 @@ public class BioAssay extends AbstractDescribable implements SecuredChild { private BioMaterial sampleUsed; /** - * Accession for this assay. + * Primary accession for this assay, usually from GEO. */ @Nullable private DatabaseEntry accession; + /** + * Other accessions for this assay. + */ + private Set otherAccessions = new HashSet<>(); + /** * Indicates if the assay should be considered an outlier based on QC. *

@@ -206,6 +213,25 @@ public void setAccession( @Nullable DatabaseEntry accession ) { this.accession = accession; } + @IndexedEmbedded + public Set getOtherAccessions() { + return otherAccessions; + } + + public void setOtherAccessions( Set otherAccessions ) { + this.otherAccessions = otherAccessions; + } + + @Transient + public Set getAllAccessions() { + Set allAccessions = new HashSet<>(); + if ( this.accession != null ) { + allAccessions.add( this.accession ); + } + allAccessions.addAll( this.otherAccessions ); + return allAccessions; + } + public ArrayDesign getArrayDesignUsed() { return this.arrayDesignUsed; } diff --git a/gemma-core/src/main/java/ubic/gemma/model/expression/biomaterial/BioMaterial.java b/gemma-core/src/main/java/ubic/gemma/model/expression/biomaterial/BioMaterial.java index 1535773304..25bcfe2d7a 100644 --- a/gemma-core/src/main/java/ubic/gemma/model/expression/biomaterial/BioMaterial.java +++ b/gemma-core/src/main/java/ubic/gemma/model/expression/biomaterial/BioMaterial.java @@ -58,8 +58,15 @@ public class BioMaterial extends AbstractDescribable implements SecuredChild { private Set bioAssaysUsedIn = new HashSet<>(); private Set treatments = new HashSet<>(); private Set characteristics = new HashSet<>(); + /** + * Primary external accession for this biomaterial, if any. + */ @Nullable private DatabaseEntry externalAccession; + /** + * Other external accessions that this biomaterial is associated with. + */ + private Set otherExternalAccessions = new HashSet<>(); @Override @DocumentId @@ -147,6 +154,25 @@ public void setExternalAccession( @Nullable DatabaseEntry externalAccession ) { this.externalAccession = externalAccession; } + @IndexedEmbedded + public Set getOtherExternalAccessions() { + return otherExternalAccessions; + } + + public void setOtherExternalAccessions( Set otherExternalAccessions ) { + this.otherExternalAccessions = otherExternalAccessions; + } + + + @Transient + public Set getAllExternalAccessions() { + Set allAccessions = new HashSet<>(); + if ( this.externalAccession != null ) { + allAccessions.add( this.externalAccession ); + } + allAccessions.addAll( this.otherExternalAccessions ); + return allAccessions; + } /** * Obtain the values that this BioAssay is associated with for the experiment. */ diff --git a/gemma-core/src/main/java/ubic/gemma/model/expression/experiment/ExpressionExperiment.java b/gemma-core/src/main/java/ubic/gemma/model/expression/experiment/ExpressionExperiment.java index 6137b69e4c..0646d221ff 100644 --- a/gemma-core/src/main/java/ubic/gemma/model/expression/experiment/ExpressionExperiment.java +++ b/gemma-core/src/main/java/ubic/gemma/model/expression/experiment/ExpressionExperiment.java @@ -31,6 +31,7 @@ import ubic.gemma.model.genome.Taxon; import javax.annotation.Nullable; +import javax.persistence.Transient; import java.util.HashSet; import java.util.Objects; import java.util.Set; @@ -52,9 +53,17 @@ public static ExpressionExperiment newInstance() { public static final int MAX_NAME_LENGTH = 255; + /** + * Primary accession for this experiment, usually from GEO. + */ @Nullable private DatabaseEntry accession; + /** + * Other accessions associated with this experiment. + */ + private Set otherAccessions = new HashSet<>(); + /** * Type of batch effect detected or corrected for. See {@link BatchEffectType} enum for possible values. */ @@ -143,6 +152,21 @@ public DatabaseEntry getAccession() { return accession; } + @IndexedEmbedded + public Set getOtherAccessions() { + return otherAccessions; + } + + @Transient + public Set getAllAccessions() { + Set allAccessions = new HashSet<>(); + if ( this.accession != null ) { + allAccessions.add( this.accession ); + } + allAccessions.addAll( this.otherAccessions ); + return allAccessions; + } + @Override @IndexedEmbedded public BibliographicReference getPrimaryPublication() { @@ -260,6 +284,10 @@ public void setAccession( @Nullable DatabaseEntry accession ) { this.accession = accession; } + public void setOtherAccessions( Set otherAccessions ) { + this.otherAccessions = otherAccessions; + } + public void setBatchConfound( @Nullable String batchConfound ) { // FIXME don't use a string for this this.batchConfound = batchConfound; } diff --git a/gemma-core/src/main/java/ubic/gemma/persistence/service/expression/experiment/ExpressionExperimentDaoImpl.java b/gemma-core/src/main/java/ubic/gemma/persistence/service/expression/experiment/ExpressionExperimentDaoImpl.java index fcb4e0a1a0..92ac8d09bf 100644 --- a/gemma-core/src/main/java/ubic/gemma/persistence/service/expression/experiment/ExpressionExperimentDaoImpl.java +++ b/gemma-core/src/main/java/ubic/gemma/persistence/service/expression/experiment/ExpressionExperimentDaoImpl.java @@ -2142,6 +2142,10 @@ public void thawLiter( final ExpressionExperiment expressionExperiment ) { thawDatabaseEntry( expressionExperiment.getAccession() ); } + for ( DatabaseEntry de : expressionExperiment.getOtherAccessions() ) { + thawDatabaseEntry( de ); + } + if ( expressionExperiment.getMeanVarianceRelation() != null ) { Hibernate.initialize( expressionExperiment.getMeanVarianceRelation() ); } diff --git a/gemma-core/src/main/java/ubic/gemma/persistence/util/Thaws.java b/gemma-core/src/main/java/ubic/gemma/persistence/util/Thaws.java index c8d1ed643d..94d6a0bed1 100644 --- a/gemma-core/src/main/java/ubic/gemma/persistence/util/Thaws.java +++ b/gemma-core/src/main/java/ubic/gemma/persistence/util/Thaws.java @@ -41,6 +41,9 @@ public static void thawBioAssayDimension( BioAssayDimension bioAssayDimension ) * The corresponding biomaterial is also thawed with {@link #thawBioMaterial(BioMaterial)}. */ public static void thawBioAssay( BioAssay ba ) { + for ( DatabaseEntry de : ba.getOtherAccessions() ) { + Thaws.thawDatabaseEntry( de ); + } Hibernate.initialize( ba.getArrayDesignUsed() ); Hibernate.initialize( ba.getArrayDesignUsed().getDesignProvider() ); if ( ba.getOriginalPlatform() != null ) { @@ -65,6 +68,9 @@ public static void thawBioMaterial( BioMaterial bm2 ) { private static void thawBioMaterial( BioMaterial bm2, boolean initializeBioAssaysUsedIn ) { visitBioMaterials( bm2, bm -> { + for ( DatabaseEntry de : bm.getOtherExternalAccessions() ) { + Thaws.thawDatabaseEntry( de ); + } Hibernate.initialize( bm.getSourceTaxon() ); Hibernate.initialize( bm.getTreatments() ); for ( FactorValue fv : bm.getFactorValues() ) { diff --git a/gemma-core/src/main/resources/ubic/gemma/model/analysis/Investigation.hbm.xml b/gemma-core/src/main/resources/ubic/gemma/model/analysis/Investigation.hbm.xml index 3ea3454c61..7e02d6a32d 100644 --- a/gemma-core/src/main/resources/ubic/gemma/model/analysis/Investigation.hbm.xml +++ b/gemma-core/src/main/resources/ubic/gemma/model/analysis/Investigation.hbm.xml @@ -102,6 +102,12 @@ + + + + + + diff --git a/gemma-core/src/main/resources/ubic/gemma/model/expression/bioAssay/BioAssay.hbm.xml b/gemma-core/src/main/resources/ubic/gemma/model/expression/bioAssay/BioAssay.hbm.xml index be8dea17b2..ea25333d00 100644 --- a/gemma-core/src/main/resources/ubic/gemma/model/expression/bioAssay/BioAssay.hbm.xml +++ b/gemma-core/src/main/resources/ubic/gemma/model/expression/bioAssay/BioAssay.hbm.xml @@ -64,6 +64,13 @@ lazy="false" fetch="join"> + + + + + + + diff --git a/gemma-core/src/main/resources/ubic/gemma/model/expression/biomaterial/BioMaterial.hbm.xml b/gemma-core/src/main/resources/ubic/gemma/model/expression/biomaterial/BioMaterial.hbm.xml index 8cabf04d18..a983001547 100644 --- a/gemma-core/src/main/resources/ubic/gemma/model/expression/biomaterial/BioMaterial.hbm.xml +++ b/gemma-core/src/main/resources/ubic/gemma/model/expression/biomaterial/BioMaterial.hbm.xml @@ -57,5 +57,12 @@ lazy="false" fetch="join"> + + + + + + + \ No newline at end of file