Hi All,
I do not know whether this is desired behavior but when I use
QueryByCriteria with an object that maps an inheritance hierarchy,
only the fields specific for that object are queried (the javadocs
state: Builds a Query based on anObject all non null values are used
as EqualToCriteria).
Consider the mapping below; there are specific detectionmethods
(rnadetection, dnadetection) inheriting from a generic detectionmethod.
This generic detectionmethod has a geneexptype; the specific
rnadetection has a rnadetectiontype
When I now query the following
RnaDetection detection = new RnaDetection();
detection.setDetectiontype("Rna level");
detection.setRnadetectiontype("Northern Blot");
detection.setGeneexptype("Mutant on");
QueryByCriteria q = new QueryByCriteria(evidence);
q.toString() now gives:
QueryByCriteria from class
amcplugin.data.persistency.RnaDetection where [rnadetectiontype =
Northern Blot]
This finds the wrong object as the fields geneexptype and
detectiontype are not taken into consideration....
See below for descriptors and classes; maybe there's something wrong
in the way I implement these using interfaces?
Or is overriding equals, hashcode not allowed (till now I did not
experience problems with that)
Thanks in advance!
Piet
<class-descriptor
class="amcplugin.data.persistency.DetectionMethod"
table="DETECTION_METHOD"
>
<field-descriptor id="1"
name="methodid"
column="METHOD_ID"
jdbc-type="INTEGER"
primarykey="true"
autoincrement="true"
/>
<field-descriptor id="2"
name="detectiontype"
column="DETECTION_TYPE"
jdbc-type="VARCHAR"
/>
<field-descriptor id="3"
name="geneexptype"
column="GENE_EXP_TYPE"
jdbc-type="VARCHAR"
/>
</class-descriptor>
<!-- RnaDetection describes the method of detection on rna level -->
<class-descriptor
class="amcplugin.data.persistency.RnaDetection"
table="RNA_DETECTION"
>
<field-descriptor id="1"
name="methodid"
column="METHOD_ID"
jdbc-type="INTEGER"
primarykey="true"
/>
<field-descriptor id="2"
name="rnadetectiontype"
column="RNA_DETECTION_TYPE"
jdbc-type="VARCHAR"
/>
<reference-descriptor name="super"
class-ref="amcplugin.data.persistency.DetectionMethod"
>
<foreignkey field-ref="methodid"/>
</reference-descriptor>
</class-descriptor>
public class DetectionMethod implements DetectionMethodInterface
{
private volatile int hashCode = 0;
public static String METHOD_ID = "methodid";
public static String GENE_EXP_TYPE = "geneexptype";
public static String DETECTION_TYPE = "detectiontype";
protected Integer methodid;
protected String geneexptype;
protected String detectiontype;
public DetectionMethod()
{
this.setDetectiontype("Not specified");
this.setGeneexptype("Not specified");
}
public String getGeneexptype()
{
return geneexptype;
}
public void setGeneexptype(String geneexptype)
{
this.geneexptype = geneexptype;
}
public String getDetectiontype()
{
return detectiontype;
}
public void setDetectiontype(String detectionlevel)
{
this.detectiontype = detectionlevel;
}
/**
* @return Returns the methodid.
*/
public Integer getMethodid()
{
return methodid;
}
public void setMethodid(Integer methodid)
{
this.methodid = methodid;
}
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append(this.getDetectiontype());
return sb.toString();
}
/**
* Override to compare dataobjects
*
* @return
*/
public boolean equals(Object o)
{
if (o == this)
return true;
if (o != null && o.getClass().equals(this.getClass()))
{
DetectionMethod other = (DetectionMethod) o;
return ((this.detectiontype == other.detectiontype) ||
(this.detectiontype != null)
&& this.detectiontype.equals(other.detectiontype))
&& ((this.geneexptype == other.geneexptype) ||
(this.geneexptype != null)
&& this.geneexptype.equals(other.geneexptype));
}
else
return false;
}
/**
* When equals overridden than hashCode also
*/
public int hashCode()
{
if (hashCode == 0)
{
int dl, ge;
if (this.detectiontype == null)
dl = 0;
else
dl = this.detectiontype.hashCode();
if (this.geneexptype == null)
ge = 0;
else
ge = this.geneexptype.hashCode();
int result = 17;
result = 37 * result + dl;
result = 37 * result + ge;
hashCode = result;
}
return hashCode;
}
}
public interface DetectionMethodInterface {
public String getDetectiontype();
public void setDetectiontype(String detectionlevel);
public String getGeneexptype();
public void setGeneexptype(String hostproperties);
public Integer getMethodid();
public void setMethodid(Integer methodid);
}
public class RnaDetection extends DetectionMethod implements
RnaDetectionInterface
{
public static String RNA_DETECTION_TYPE = "rnadetectiontype";
private volatile int hashCode = 0;
protected String rnadetectiontype;
public RnaDetection()
{
super();
super.setDetectiontype("Rna level");
this.setRnadetectiontype("Unspecified");
}
public String getRnadetectiontype()
{
return rnadetectiontype;
}
public void setRnadetectiontype(String rnadetectiontype)
{
this.rnadetectiontype = rnadetectiontype;
}
public String toString()
{
StringBuffer sb = new StringBuffer();
sb.append(getRnadetectiontype());
sb.append("::");
sb.append(super.toString());
return sb.toString();
}
/**
* Override to compare dataobjects
*
* @return
*/
public boolean equals(Object o)
{
if (o == this)
return true;
if (o != null && o.getClass().equals(this.getClass()))
{
RnaDetection other = (RnaDetection) o;
return ((this.detectiontype == other.detectiontype) ||
(this.detectiontype != null)
&& this.detectiontype.equals(other.detectiontype))
&& ((this.geneexptype == other.geneexptype) ||
(this.geneexptype != null)
&& this.geneexptype.equals(other.geneexptype))
&& ((this.rnadetectiontype ==
other.rnadetectiontype) || (this.rnadetectiontype != null)
&&
this.rnadetectiontype.equals(other.rnadetectiontype));
}
else
return false;
}
/**
* When equals overridden than hashCode also
*/
public int hashCode()
{
if (hashCode == 0)
{
int dl, ge, rdt;
if (this.detectiontype == null)
dl = 0;
else
dl = this.detectiontype.hashCode();
if (this.geneexptype == null)
ge = 0;
else
ge = this.geneexptype.hashCode();
if (this.rnadetectiontype == null)
rdt = 0;
else
rdt = this.rnadetectiontype.hashCode();
int result = 17;
result = 37 * result + dl;
result = 37 * result + ge;
result = 37 * result + rdt;
hashCode = result;
}
return hashCode;
}
public interface RnaDetectionInterface extends DetectionMethodInterface {
public String getRnadetectiontype();
public void setRnadetectiontype(String rnadetectiontype);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]