David,

Yeah, I would've thought that too, definitions should model only static 
structure.

Given my first example, I would like to do a query like "find a Group that has all 3 kinds of members (LEADER, VICE, MEMBER)".

Or even more complex: "find a Group where a/the leader's name is like Blah, a/the vice's name is like Bleh, and a/the member's name is like Bluh".

I've having difficulty putting that into a view-entity and generating a resultant ListIterator with GenericDelegator.

Help? Thanks!

Jonathon

David E Jones wrote:

In general entity and view entity definitions are meant to model structure, not query constraints. Just add your desired constraints to the EntityCondition passed into the findByCondition call (or Map for findByAnd or whatever).

-David


Jonathon -- Improov wrote:
Hi Rodrigo,

Are you absolutely sure that works?

First, your suggestion throws an exception. Note that there is no such field as Member.leaderId.

Second, do take a look at SqlJdbcUtil.java method makeFromClause(). That's where you'll see the joins being made. You'll also see that this isn't possible:

"... <table1> JOIN <table2> ON (<table1>.partyId = <table2>.partyId AND <table2>.roleId = 'LEADER') ..."

What is possible is only:

"... <table1> JOIN <table2> ON (<table1>.partyId = <table2>.partyId) ..."

So, to answer my own question, the OFBiz Entity framework doesn't seem to handle what I requested for.

Perhaps I'm not understanding your suggestion? Would you mind indicating whether you are sure the suggestion works or whether it's a mere guess? Thanks.

If you are sure it works, I'll spend more time trying your suggestion. But from first impressions, you may have missed something because it throws an error.

Jonathon

Rodrigo Souza wrote:
Add to your code:

<key-map field-name="roleId" rel-field-name="leaderId"/>

i.e

<view-link entity-alias="GP" rel-entity-alias="LD" rel-optional="true">
     <!-- Where LD.roleId is "LEADER" -->
        <key-map field-name=roleId" rel-field-name="leaderId"/>
   </view-link>


2007/8/6, Jonathon -- Improov <[EMAIL PROTECTED]>:
In view-entity(s), is it possible to have conditionals in <relation>?

For eg, an entity Group can have 3 types of members: "LEADER", "VICE" and "MEMBER".

I've included my thoughts in the crude example below (please ignore syntax errors).

<entity entity-name="Group">
   <field name="groupId"/>
</entity>

<entity entity-name="Member">
   <field name="memberId"/>
   <field name="groupId"/>
   <field name="roleId"/>
   <relation rel-entity-name="Group">
     <key-map field-name="groupId"/>
   </relation>
</entity>

<view-entity entity-name="GroupAndMember">
   <member-entity entity-alias="GP" entity-name="Group"/>
   <member-entity entity-alias="LD" entity-name="Member"/>
   <member-entity entity-alias="VC" entity-name="Member"/>
   <member-entity entity-alias="MB" entity-name="Member"/>
   <alias-all entity-alias="GP"/>
   <alias entity-alias="LD" name="leaderId" field-name="memberId"/>
   <alias entity-alias="VC" name="viceId" field-name="memberId"/>
   <alias entity-alias="MB" name="memberId" field-name="memberId"/>
<view-link entity-alias="GP" rel-entity-alias="LD" rel-optional="true">
     <!-- Where LD.roleId is "LEADER" -->
   </view-link>
<view-link entity-alias="GP" rel-entity-alias="VC" rel-optional="true">
     <!-- Where VC.roleId is "VICE" -->
   </view-link>
<view-link entity-alias="GP" rel-entity-alias="MB" rel-optional="true">
     <!-- Where MB.roleId is "MEMBER" -->
   </view-link>
</entity>

I know that I can simply use different entities for leader, vice and member (eg Leader, Vice and Member). But that would be a little awkward, since all the 3 entities will have exactly the same
fields (just different roleIds).

Is the above possible in OFBiz's Entity framework?

Jonathon







Reply via email to