Ok, now I understand.
Let's take a look at it from Cayenne standpoint. Within a single
DataContext Cayenne has a notion of uniquing, so no two objects are
equal. Across the contexts, objects are equal if their ObjectIds are
equal. Otherwise property value equality means nothing to Cayenne. So
what's equal and what's not is very much context dependent :-) and
therefore java.lang.Object.equals() is the most appropriate default.
Now, IIRC, there won't be much harm done if you decide to implement
those methods on your own. But you don't have to put these methods in
the generated code. A generic method placed in a common superclass
can handle it easily (common superclass, aka "wedge class", is a
subclass of CayenneDataObject and can be set via a "Superclass" field
in the ObjEntity editor panel).
Cayenne persistent objects have access to their ObjectContext, so by
definition they have access to their mapping metadata via
EntityResolver, so comparison can be done in a generic fashion,
iterating via mapped attributes.
Andrus
On Mar 7, 2007, at 6:30 PM, jerome moliere wrote:
> 2007/3/7, Andrus Adamchik <andru..bjectstyle.org>:
>>
>> Hi Jerome,
>>
>> Could you give specific examples of the code you want to see
>> generated?
>
>
>
> yes of course I can, this is an excerpt from one of my Java class...
> This class has different attributes (name and so on):
>
>
> /* (non-Javadoc)
> *..ee java.lang.Object#equals(java.lang.Object)
> */
> ..verride
> public boolean equals(Object obj) {
> if (this == obj) {
> return true;
> }
> if (!(obj instanceof PersistentField)) {
> return false;
> }
> PersistentField rhs = (PersistentField) obj;
> return new EqualsBuilder().append(name, rhs.name).append(
> ordinalPosition, rhs.ordinalPosition)
> .isEquals();
>
> }// equals()
>
> /* (non-Javadoc)
> *..ee java.lang.Object#hashCode()
> */
> ..verride
> public int hashCode() {
> return new HashCodeBuilder().append(name).append
> (ordinalPosition)
> .append(genre).toHashCode();
> }
> /* (non-Javadoc)
> *..ee java.lang.Object#toString()
> */
> ..verride
> public String toString() {
> return new ToStringBuilder(this).append("column", name).append(
> "dataType", dataType).append("isNullable",
> isNullable).append("Fk member :",isFkMember).append("isPkmember",
> isPkMember())
> .append("typname",genre).append("refers to
> table:",refersTo)
> .toString();
> }
>
>
> these methods use the COmmons Lang main classes (ToStringBuilder
> and so on)
> to generate the hashcode/equals/toString methods...
>
>> From your message I don't quite understand why we need to
>> change the *default* template?
> Because I think it may be generated directly from the Modeler as
> the super
> classes (generated as _MyClass.java)
>
>
> Cheers
> jerome
> --
> Jerome Moliere - Mentor/J
> http://romjethoughts.blogspot.com/
> auteur Eyrolles
This archive was generated by hypermail 2.0.0 : Wed Mar 07 2007 - 11:47:10 EST