My understanding is that you choose one of the two sides as "owning" the
relationship. Let's assume that we want the @ManyToOne side as the
owner. In that case, you'll map the @ManyToOne as follows - 

  @ManyToOne(fetch=FetchType.LAZY, cascade=CascadeType.PERSIST)
  private UserInfo userInfo;

And then, we'll map the other side of the relationship as follows - 

 @OneToMany(mappedBy="publisher", cascade=CascadeType.PERSIST)
 private Collection<UserProperties> userProperties;


Notice that the @JoinColumns were removed because I think OpenJPA will
figure out on it's own to join by the @Id columns. IIUC, the syntax
above should create a bi-directional relationship in the database
between the two entities.

-Wes




On Tue, 2008-11-18 at 20:25 -0600, [EMAIL PROTECTED] wrote:
> Same result.
> 
> I'm running in Geronimo 2.1.3 which IIRC comes with OpenJPA 1.0.2.  As such, 
> I couldn't use the syntax you suggested, so I used the one that compiles.  
> The javax.persistence library with 1.0.2 says "mappedBy" wasn't found... so I 
> used this syntax in UserProperties:
> 
>       @ManyToOne(targetEntity=UserInfo.class, fetch=FetchType.LAZY) 
>       @JoinColumn(name="user_id", referencedColumnName="id") 
>       private UserInfo userInfo;
> 
> Basically, the only change was changing "mappedBy" to "targetEntity".  And, 
> I've tried this same change to both UserProperties and UserInfo with the same 
> results I was getting originally.
> 
> Thanks,
> Randy
> 
> ---- [EMAIL PROTECTED] wrote: 
> > Thanks for the quick reply.  I'll give that a shot.
> > 
> > ---- Wes Wannemacher <[EMAIL PROTECTED]> wrote: 
> > > 
> > > On Tue, 2008-11-18 at 19:36 -0600, [EMAIL PROTECTED] wrote:
> > > > Hello all,
> > > > 
> > > > I'm trying to teach myself OpenJPA and failing miserably...  
> > > > I have two entities (code below) where one contains a collection 
> > > > of the other.  The intent is for UserInfo to be able to contain 
> > > > a collection (or List) of an arbitrary number of UserProperties.  
> > > > The UserProperties are defined at run-time by data entered through 
> > > > the application.
> > > > 
> > > 
> > > I'm a bit of a newb myself, but I think you need to change your
> > > UserProperties like below -
> > > 
> > > 
> > > 
> > > @Entity
> > > @Table(name="userproperties")
> > > public class UserProperties implements Serializable {
> > > 
> > >   @Id
> > >   @Column(name="id", nullable=false)
> > >   @GeneratedValue(strategy=GenerationType.IDENTITY)
> > >   private Integer id;
> > >   
> > >   @ManyToOne(mappedBy="UserInfo", fetch=FetchType.LAZY)
> > >   @JoinColumn(name="user_id", referencedColumnName="id")
> > >   private UserInfo userInfo;
> > >

Reply via email to