Hi, It seems that on-find read-ahead do not work properly. I?ve seen so many posts in this forum for this problem, and no concrete answer. So until then here is my problem too :) I have entity with 3 fields (2 of them is primary key). I am trying to use on-find read-ahead. And I expect that everything will be loaded when I call my findAll method. But instead of this there is one Select statement for everything. And N queries that loads the other field from the DB for every primary key. Which acts as on-load. Here is the log from the jboss console: 10:17:39,046 DEBUG [EAttachmentToProcess#findAll] Executing SQL: SELECT t0_a.cAt tachId, t0_a.cProcessId, t0_a.cActId FROM tBPAttachProc t0_a
10:17:39,250 DEBUG [EAttachmentToProcess] Executing SQL: SELECT cActId FROM tBPA ttachProc WHERE (cAttachId=? AND cProcessId=?) 10:17:39,265 DEBUG [EAttachmentToProcess] Executing SQL: SELECT cActId FROM tBPA ttachProc WHERE (cAttachId=? AND cProcessId=?) ?? N TIMES As you see it is in the same transaction @ejb.transaction type="Required" (as noted in the Forum). Other thing is that I try and load-group for the activityId which is not in the PK for this table, and guess ? nothing changed. N+1 queries each time. It is killing me? Additional info: This is JBoss 3.2.6 on Windows XP Here comes my xDocleted entity. package com.some.attachment; import javax.ejb.CreateException; import javax.ejb.EntityBean; import javax.ejb.EntityContext; import javax.ejb.RemoveException; /** * Entity representing the relation many-to-many between attachments and process instances * * Standard entity bean, provides two finder methods (besides findByPK)- by attachment id * and by process id. * * @author nts * @version $Revision: 1.5 $ * * @ejb.bean name = "EAttachmentToProcess" * type="CMP" * local-jndi-name="ejb/EAttachmentToProcessLocal" * jndi-name="ejb/EAttachmentToProcess" * prim-key-class="com.some.attachment.EAttachmentToProcessPK" * view-type="both" * cmp-version="2.x" * * @ejb.finder signature = "java.util.Collection findByAttachemntId(java.lang.String attachmentId)" * query = "SELECT Object(a) FROM EAttachmentToProcess a WHERE a.attachmentId = ?1" * * @ejb.finder signature = "java.util.Collection findByProcessId(java.lang.String processId)" * query = "SELECT Object(a) FROM EAttachmentToProcess a WHERE a.processId = ?1" * * @ejb.finder signature = "java.util.Collection findAll()" * query = "SELECT Object(a) FROM EAttachmentToProcess a" * * @jboss.query signature ="java.util.Collection findAll()" * query = "SELECT Object(a) FROM EAttachmentToProcess a" * strategy = "on-find" * * @ejb.transaction * type="Required" * * @ejb.permission role-name="admin" * * @ejb.persistence table-name = "tBPAttachProc" * * JBoss specific * * @jboss.persistence table-name = "tBPAttachProc" create-table = "false" * * @jboss.container-configuration name="EntityBean_Commit_A" * @jboss.read-ahead strategy="on-find" * * @jboss.entity-command name = "no-select-before-insert" * */ public abstract class EAttachmentToProcessEJB implements EntityBean { private static final long serialVersionUID = 20050119L; private transient EntityContext context; /** * Part of the PK and also a FK to tAttachment * * @return * * @ejb.interface-method view-type = "both" * @ejb.persistence column-name = "cAttachId" * jdbc-type="CHAR" * sql-type="CHAR(36)" * */ public abstract String getAttachmentId(); /** * * @param id * * @ejb.interface-method view-type = "both" * @ejb.persistence column-name = "cAttachId" * jdbc-type="CHAR" * sql-type="CHAR(36)" * */ public abstract void setAttachmentId(String id); /** * Part of the PK and also a FK to tProcInstance * * @return * * @ejb.interface-method view-type = "both" * @ejb.persistence column-name = "cProcessId" * jdbc-type="CHAR" * sql-type="CHAR(36)" * */ public abstract String getProcessId(); /** * * @param id * * @ejb.interface-method view-type = "both" * @ejb.persistence column-name = "cProcessId" * jdbc-type="CHAR" * sql-type="CHAR(36)" */ public abstract void setProcessId(String id); /** * Additional info - id of the activity (receive, invoke ...) * @return * * @ejb.interface-method view-type = "both" * @ejb.persistence column-name = "cActId" * jdbc-type= "VARCHAR" * sql-type= "VARCHAR(512)" * */ public abstract String getActivityId(); /** * @ejb.interface-method view-type = "both" * @ejb.persistence column-name = "cActId" * jdbc-type= "VARCHAR" * sql-type= "VARCHAR(512)" */ public abstract void setActivityId(String id); /** * @ejb.create-method view-type = "both" */ public EAttachmentToProcessPK ejbCreate(String attId, String procId, String actId) throws CreateException { setAttachmentId(attId); setProcessId(procId); setActivityId(actId); EAttachmentToProcessPK pk = new EAttachmentToProcessPK(attId, procId); return pk; } ????. and so on } Here is snipet of my jbosscmp-jdbc.xml generated file <ejb-name>EAttachmentToProcess</ejb-name> <create-table>false</create-table> <read-ahead> on-find </read-ahead> <table-name>tBPAttachProc</table-name> <cmp-field> <field-name>attachmentId</field-name> <column-name>cAttachId</column-name> <jdbc-type>CHAR</jdbc-type> <sql-type>CHAR(36)</sql-type> </cmp-field> <cmp-field> <field-name>processId</field-name> <column-name>cProcessId</column-name> <jdbc-type>CHAR</jdbc-type> <sql-type>CHAR(36)</sql-type> </cmp-field> <cmp-field> <field-name>activityId</field-name> <column-name>cActId</column-name> <jdbc-type>VARCHAR</jdbc-type> <sql-type>VARCHAR(512)</sql-type> </cmp-field> <query-method> <method-name>findAll</method-name> <method-params> </method-params> </query-method> <jboss-ql>[CDATA[SELECT Object(a) FROM EAttachmentToProcess a]]</jboss-ql> <read-ahead> on-find </read-ahead> <entity-command name="no-select-before-insert"> </entity-command> So if you help it will be great. If you say that there is bug is ok too. I just want to know where is the problem is it my fault? Best regards, Zhivko View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3903209#3903209 Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3903209 ------------------------------------------------------- This SF.Net email is sponsored by the JBoss Inc. Get Certified Today * Register for a JBoss Training Course Free Certification Exam for All Training Attendees Through End of 2005 Visit http://www.jboss.com/services/certification for more information _______________________________________________ JBoss-user mailing list JBoss-user@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/jboss-user