[jboss-user] [EJB 3.0] - Etity reference problems

oskar.carlstedt do-not-reply at jboss.com
Fri Mar 30 04:48:20 EDT 2007


Hi All!

I have a quite strange data model, but it has it explanation. Lets say we have the following tables in my db:


  | 
  | -----------
  | | A       |
  | -----------
  | | Aid (pk)|
  | |         |
  | -----------
  | 
  | 
  | -----------
  | | B       |
  | -----------
  | | Bid (pk)|
  | | Aid (fk)|
  | |         |
  | -----------
  | 
  | 
  | -----------
  | | C       |
  | -----------
  | | Aid (pk)|
  | | Bid (fk)|
  | |         |
  | -----------
  | There is a unique constraint on the tuple (Aid, Bid) 
  | 
  | 

A textual explanation of the model:
A is the master table. It has more info than the columns I described. But the most important one is the primary key Aid.
B is another table. Items in B references A, i.e. there are many B items on one A item (many-to-one).
C is a table that will point out one row in B from A. So there is a one-to-one relationship between A and B that is stored in table C.

The problem here is that we have a kind of circular reference. Is it possible to model this in EJB3 with annotation. I have tried a lot, but nothing works. I often get a NPE for OneToOne on line 135.

The classesre defined as follows:

  | 
  | public class A {
  | 
  |    @Id
  |    @GeneratedValue(strategy = GenerationType.IDENTITY)
  |    @Column(name = "Aid")
  |    private Integer id;
  | 
  |    @OneToMany(cascade = CascadeType.ALL, mappedBy = "A", fetch = FetchType.LAZY)
  |    private List<B> Bs = new ArrayList<B>();
  | 
  | 
  |    @OneToOne
  |    @PrimaryKeyJoinColumn
  |    private C c = null;
  | 
  |    ...
  | }
  | 
  | 
  | 
  | public class B {
  | 
  |    @Id
  |    @GeneratedValue(strategy = GenerationType.IDENTITY)
  |    @Column(name = "Bid")
  |    private Integer Bid;
  | 
  |    @ManyToOne
  |    @JoinColumn(name = "Aid", nullable = false)
  |    private A a;
  | 
  |    ...
  | }
  | 
  | 
  | public class C {
  | 
  |    @Id
  |    @Column(name = "Aid")
  |    private Integer id;
  | 
  |    @OneToOne
  |    @JoinColumn(name = "Aid", nullable=false)
  |    private A a;
  | 
  |    @OneToOne
  |    @PrimaryKeyJoinColumn
  |    private B b;
  | 
  |    ...
  | }
  | 
  | 

So, it is a problem doing this way. Does anyone know how to get it to work. I know the datamodel is a bit tricky - the explanation I have is that we want all references to A be in the same direction.

Environment:
JBoss 4.0.5.GA
JBoss EJB3 RC9 Patch
JBoss WS 1.2.0GA SP1

Database MySQL 5, no InnoDB

I would really appreciate if someone can help me
Best Regards
Oskar



View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4033045#4033045

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4033045



More information about the jboss-user mailing list