Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 368
  • Last Modified:

Creating Entity bean for a 'table' without PrimaryKey

Hi,

I have a relation table without primarykey. My table name is "favorite" and it has:
worker_id   int   (FK to "worker" table)
task_id   int   (FK to "tasks" table)
priority   int

If i want to create an Entity Bean, we usually create all the 'columns' with getter and setter along with the column type. For example, (just an example):
           
     /**
       * @author bj 17.09.2004
       * Name
       *
       * @ejb.interface-method view-type = "both"
       * @ejb.persistence column-name = "name"
       * @return
       */
      public abstract String getName();

      /**
       * @ejb.interface-method view-type = "both"
       * @param name
       */
      public abstract void setName(String name);


The method ejbCreate() should have the return type of PrimaryKey. My every other table has a PK field and i do like:
     public Integer ejbCreate() throws CreateException {
            return null;
    }

Since my "Favorite" table doesn't have a PK field, how can i create en Entity bean for that table? How to solve the problem of ejbCreate() return type?
0
ldbkutty
Asked:
ldbkutty
  • 4
  • 2
1 Solution
 
TimYatesCommented:
It does have a primary key.  The primary key is a composite of:

  worker_id and task_id

isn't it?

Have a look at this:  http://java.sun.com/j2ee/tutorial/1_3-fcs/doc/CMP8.html (for CMP) and this http://java.sun.com/j2ee/1.4/docs/tutorial/doc/BMP4.html (for BMP)

0
 
ldbkuttyAuthor Commented:
I understand that PK is combination of worker_id and task_id, but i cannot/shouldn't  create the FK fields(getter, setter) in my Entity Bean. Instead I have to make the relation for those FK's.

For example, in my "Tasks" table, i have 'taskworker_id' FK column to "TaskWorker" table. In my Entity bean, i have:

     /**
       * @author bj 16.09.2004
       *
       * Task TaskWorker Relation
       *
       * @ejb.interface-method
       *       view-type = "local"
       *
       * @ejb.relation
       *       name = "taskworker_task"
       *          role-name = "task from taskworker"
       *
       * @jboss.relation
       *       fk-column = "'taskworker_id"
       *       related-pk-field = "id"
       *       fk-constraint = "true"
       */
      public abstract TaskWorkerLocal getTaskWorker();

      /**
       * @ejb.interface-method view-type = "local"
       * @param taskWorker
       */
      public abstract void setTaskWorker(TaskWorkerLocal taskWorker);
0
 
TimYatesCommented:
> Instead I have to make the relation for those FK's.

But you need to be able to access the "priority" field, so you will need to create an Entity bean for that table...

public class FavouritePK implements Serializable
{
    Worker worker ;
    Task task ;

    public FavouritePK() {}
    public FavouritePK( Worker worker, Task task )
    {
        this.worker = worker ;
        this.task = task ;
    }

    public Worker getWorker()
    {
        return worker ;
    }
   
    public Worker getTask()
    {
        return task ;
    }

    public boolean equals( Object o )
    {
        if( o == null || !(o instanceof FavouritePK ) )
            return false ;
        FavouritePK other = (FavouritePK)o ;
        return this.worker.equals( other.worker ) && this.task.equals( other.task ) ;
    }
 
    public int hashCode()
    {
        return worker.hashCode() ^ task.hashCode() ;
    }
}

Then, in your Entity bean:

public abstract class FavouriteBean implements javax.ejb.EntityBean
{
    Worker worker ;
    Task task ;
    int priority ;

    public FavouritePK ejbCreate( Worker w, Task t )
    {
        setWorker( worker ) ;
        setTask( task ) ;
        setPriority( priority ) ;
        return null ;
    }

    ...rest of your code...
}
0
Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 
TimYatesCommented:
>     public FavouritePK ejbCreate( Worker w, Task t )

should be

    public FavouritePK ejbCreate( Worker w, Task t, int priority )
0
 
ldbkuttyAuthor Commented:
sorry for late...but that worked great.

Thanks.
0
 
TimYatesCommented:
:-)  Cool :-)

Good luck with it :-)

Tim
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 4
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now