Hi thomas, Jakob
       Jakob's right. A dot notation does not work with ojb query. I prefer "->" like 
Thomas.

       If you want to use this impl with ojb query criteria, I think it should 
override getName method like this.

public String getName() {

return this.fieldName;

}

     For odmg parser, I guess it doesn't accept a symbol like "#" or "->", correct me 
if I'm wrong.

Regards,

Atipon

 

 Thomas Mahler <[EMAIL PROTECTED]> wrote:
Hi again Jakob,

Jakob Braeuchi wrote:
> hi atipon, thomas,
> 
> does this solution interfere with path expressions and joins ?

Oops, I missed this.

> given you have an attribute named 'audit.createdBy' in a selection criteria.
> when building the sql, ojb will try to find a relationship called 'audit'
> because of the dot-notation.

You are right.

> this problem coud eventually be solved by using another notation
> (audit#createdBy, audit->createdBy).
> 

I'd prefer "->" as most people will recognize it as signaling a reference.

Any comments?

cheers,
Thomas


> just my CHF 0.02
> 
> jakob
> 
> ----- Original Message -----
> From: "Thomas Mahler" 
> To: "OJB Users List" 
> Sent: Sunday, October 20, 2002 12:12 PM
> Subject: Re: Need PersistentField impl suggestion
> 
> 
> 
>>Hi Atipon,
>>
>>atipon pongpat wrote:
>> > Hi, My company currently uses Toplink for o/r mapping, so I want to
>> > write an ojb mapping without any modification to existing domain
>> > object. The problem arises when I try to map nested object on the
>> > same table of parent object. My first solution is rowreader + field
>> > conversion.(Thanks to Thomas Mahler for his response to my friend,
>> > Sumeth Chittaprawat) It works fine but I just don't want to write a
>> > rowreader for every class that has a nested object. I decided to
>> > extend ojb provided PersistentField impl to supports using of nested
>> > attribute. My repository looks something like this.
>>
>>Hey, this is a cool idea! I've never thought of this solution.
>>I think we should integrate it into the main distribution. As it will
>>solve a lot of problems.
>>
>> > >> > id="2" name="name" column="SUPP_NAME" jdbc-type="CHAR" />
>> >
>> > >> > jdbc-type="CHAR" />
>>
>> > Is there something I have to concern when I
>> > create my own PersistentField impl ?
>>
>>No, no problems to be expected.
>>
>> > I'm afraid that it cannot be
>> > used with odmg or jdo api.
>>
>>I don't see any problems.
>>
>>cheers,
>>Thomas
>>
>> >
>> > Thanks in advance, Atipon Pongpat
>> >
>> > P.S. This my code. Any comments or suggestions are welcome. package
>> > testojb;
>> >
>> > import java.lang.reflect.Field;
>> >
>> > import org.apache.ojb.broker.metadata.MetadataException; import
>> > org.apache.ojb.broker.metadata.PersistentFieldMaxPerformanceImpl;
>> > import org.apache.ojb.broker.util.logging.Logger; import
>> > org.apache.ojb.broker.util.logging.LoggerFactory;
>> >
>> > /** * * This class supports using of nested attribute. * @author
>> > Atipon Pongpat */ public class
>> > PersistentNestedFieldMaxPerformanceImpl extends
>> > PersistentFieldMaxPerformanceImpl {
>> >
>> > private String fieldName;
>> >
>> > private Logger logger = LoggerFactory.getLogger(this.getClass());
>> >
>> > public PersistentNestedFieldMaxPerformanceImpl(Field f) { super(f); }
>> >
>> >
>> > public PersistentNestedFieldMaxPerformanceImpl(Class c, String
>> > fieldname) { super(c, fieldname); this.fieldName = fieldname; }
>> >
>> > /** * @see
>> > org.apache.ojb.broker.metadata.PersistentFieldMaxPerformanceImpl#getF-
>> > ieldRecursive(Class, String) */ protected Field
>> > getFieldRecursive(Class c, String fieldname) throws
>> > NoSuchFieldException { //thanks for the original implementation of
>> > PersistentFieldMaxPerformanceImpl try { Field f = null; int index =
>> > fieldname.indexOf("."); if (index >= 0) { String name =
>> > fieldname.substring(0, index); Field field =
>> > c.getDeclaredField(name); Class nestedClass = field.getType(); //
>> > String nestedName = fieldname.substring(index + 1); f =
>> > getFieldRecursive(nestedClass, nestedName); } else { f =
>> > c.getDeclaredField(fieldname); } return f; } catch
>> > (NoSuchFieldException e) { // if field could not be found in the
>> > inheritance hierarchy, signal error if (c == Object.class) { throw e;
>> > } // if field could not be found in class c try in superclass else {
>> > return getFieldRecursive(c.getSuperclass(), fieldname); } } }
>> >
>> > /** * @see org.apache.ojb.broker.metadata.PersistentField#get(Object)
>> > */ public Object get(Object anObject) throws MetadataException {
>> > return getNestedObject(anObject, fieldName); }
>> >
>> > /** * @see org.apache.ojb.broker.metadata.PersistentField#set(Object,
>> > Object) */ public void set(Object obj, Object value) throws
>> > MetadataException { setNestedObject(obj, fieldName, value); }
>> >
>> >
>> > /** * Set nested attribute with given value. * @param obj the object
>> > whose field should be modified * @param fieldName nested attribute
>> > name * @param value the new value for the field of obj being modified
>> > */ protected void setNestedObject(Object obj, String fieldName,
>> > Object value) {
>> >
>> > int index = fieldName.indexOf("."); if (index >= 0) { String name =
>> > fieldName.substring(0, index); PersistentFieldMaxPerformanceImpl
>> > pField = new PersistentFieldMaxPerformanceImpl(obj.getClass(), name);
>> > Object attrib = pField.get(obj);
>> >
>> > if (attrib == null) { try { attrib = pField.getType().newInstance();
>> > } catch (InstantiationException e) { throw new MetadataException(
>> > "Error instantiate field:" + name + " in object:" +
>> > obj.getClass().getName(), e); } catch (IllegalAccessException e) {
>> > throw new MetadataException( "Error getting field:" + name + " in
>> > object:" + obj.getClass().getName(), e); }
>> >
>> > pField.set(obj, attrib); } // String nestedName =
>> > fieldName.substring(index + 1);
>> >
>> > setNestedObject(attrib, nestedName, value); } else {
>> >
>> > PersistentFieldMaxPerformanceImpl pField = new
>> > PersistentFieldMaxPerformanceImpl( obj.getClass(), fieldName);
>> > pField.set(obj, value); }
>> >
>> > }
>> >
>> > /** * Get nested attribute with given field name. * @param obj object
>> > from which the represented field's value is to be extracted * @param
>> > fieldName nested attribute name * @return Object the value of the
>> > represented field in object obj */ protected Object
>> > getNestedObject(Object obj, String fieldName) {
>> >
>> > Object result = null; int index = fieldName.indexOf("."); if (index
>> > >= 0) { String name = fieldName.substring(0, index);
>> > PersistentFieldMaxPerformanceImpl pField = new
>> > PersistentFieldMaxPerformanceImpl(obj.getClass(), name); Object
>> > attrib = pField.get(obj);
>> >
>> > if (attrib != null) { // String nestedName =
>> > fieldName.substring(index + 1); result = getNestedObject(attrib,
>> > nestedName); } } else {
>> >
>> > PersistentFieldMaxPerformanceImpl pField = new
>> > PersistentFieldMaxPerformanceImpl( obj.getClass(), fieldName); result
>> > = pField.get(obj); }
>> >
>> > return result; }
>> >
>> > }
>> >
>> >
>> >
>> >
>> > --------------------------------- Do you Yahoo!? Y! Web Hosting - Let
>> > the expert host your web site
>>
>>
>>
>>
>>--
>>To unsubscribe, e-mail: 
>>For additional commands, e-mail: 
>>
> 
> 
> --
> To unsubscribe, e-mail: 
> For additional commands, e-mail: 
> 
> 
> 
> 




--
To unsubscribe, e-mail: 
For additional commands, e-mail: 



---------------------------------
Do you Yahoo!?
Y! Web Hosting - Let the expert host your web site

Reply via email to