openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Patrick Linskey" <plins...@gmail.com>
Subject Re: Problem with @ManyToOne and @JoinTable
Date Tue, 06 Nov 2007 01:37:44 GMT
I think he's actually trying to just have a single (unidirectional)
reference -- I think he added the backpointer just to see if he could
get things working that way.

-Patrick

On Nov 5, 2007 5:26 PM, Marina Vatkina <Marina.Vatkina@sun.com> wrote:
> You need to have @OneToMany(mappedBy="show") - otherwise you get 2
> unidirectional relationships, while you are trying to make them bidirectional.
>
> Regards,
> -marina
>
>
> Geir Magnusson Jr. wrote:
> > To review, I have three tables :
> >
> > Show, InputFile and a join table, Show2InputFile.
> >
> > Show happens to be a subclass of InventoryItem using JOINED  inheritance
> > strategy.  Not sure if that matters.  (I've seen some  weird behavior w/
> > Hibernate w/ JOINED, so I'm suspicious of it for no  rational reason)
> >
> > Show has a PK "id", as does InputFile.
> >
> > Show2InputFile looks like :
> >
> > +-------------+------------------+------+-----+---------+-------+
> > | Field       | Type             | Null | Key | Default | Extra |
> > +-------------+------------------+------+-----+---------+-------+
> > | showId      | int(11) unsigned | NO   | PRI |         |       |
> > | inputFileId | int(11) unsigned | NO   | PRI |         |       |
> > +-------------+------------------+------+-----+---------+-------+
> >
> > I believe it's unidirectional ManyToOne (if that's legal).  Each
> > InputFile is associated with one Show and one Show only, but multiple
> > InputFiles can be associated to the same Show.
> >
> > Currently I have in InputFile :
> >
> >      @ManyToOne
> >      @JoinTable(name="Show2InputFile",
> >              joinColumns = @JoinColumn(name="inputFileId"),
> >              inverseJoinColumns = @JoinColumn(name="showId"))
> >      public Show getShow() {
> >          return show;
> >      }
> >
> > and while Hibernate thinks that's just peachy, OpenJPA 1.0.0 gags on  it
> > with
> >
> > Caused by: <openjpa-1.1.0-SNAPSHOT-r420667:588533 fatal user error>
> > org.apache.openjpa.persistence.ArgumentException: You have supplied
> > columns for "com.joost.model.logistics.InputFile.show<element:class
> > java.lang.Object>", but this mapping cannot have columns in this  context.
> >
> > Now, while I don't want to add anything to the Show class, since this
> > really is unidirectional, I did add :
> >
> >      @OneToMany
> >      @JoinTable(name="Show2InputFile",
> >               inverseJoinColumns = @JoinColumn(name="inputFileId"),
> >                joinColumns = @JoinColumn(name="showId"))
> >      public Set<InputFile> getInputFiles(){
> >          return null;
> >      }
> >
> >      public void setInputFiles(Set<InputFile> list) {
> >          //noop
> >      }
> >
> > just to see if that would make OpenJPA happy, but as far as I can  see,
> > it doesn't.  I believe I get the same error message.
> >
> > I really want to switch to OpenJPA, but this is stopping me.   Does
> > anyone have any idea what I'm doing wrong?
> >
> > geir
> >
> >
> > On Nov 5, 2007, at 3:05 PM, Patrick Linskey wrote:
> >
> >> Where are the foreign keys?
> >>
> >> Bear in mind that @OneToOne, @OneToMany, @ManyToMany, and @ManyToOne
> >> are JPA annotations, not ER annotations. The concepts differ a bit.
> >>
> >> -Patrick
> >>
> >> On Nov 5, 2007 11:33 AM, Geir Magnusson Jr. <geir@pobox.com> wrote:
> >>
> >>>
> >>> On Nov 5, 2007, at 2:07 PM, Patrick Linskey wrote:
> >>>
> >>>>>> What happens if you just use a @OneToOne instead of the  @ManyToOne?
> >>>>>
> >>>>>
> >>>>> The problem is that it's not OneToOne
> >>>>
> >>>>
> >>>> Can you describe this in more detail? (I.e., in terms of what your
> >>>> schema looks like.)
> >>>>
> >>>
> >>> Well, there's a Show table, w/ a pk, and the Show class really has no
> >>> interest in the InputFile class.
> >>>
> >>> There's an inputfile table, w/ a pk.  The InputFile class does have a
> >>> ManyToOne with Show :
> >>>
> >>> In real world problem, each Show we have on the platform is a
> >>> singleton ("I dream of Genie Epsode 11"), but a content owner may
> >>> give us updated source material - say they have a new transcoding.
> >>> We want to add a new InputFile into the database, point it at the
> >>> Show, but the Show itself doesn't care about it's source.
> >>>
> >>> Does that help?
> >>>
> >>> eir
> >>>
> >>>
> >>>
> >>>> -Patrick
> >>>>
> >>>> On Nov 5, 2007 10:40 AM, Geir Magnusson Jr. <geir@pobox.com> wrote:
> >>>>
> >>>>>
> >>>>> On Nov 5, 2007, at 12:44 PM, Patrick Linskey wrote:
> >>>>>
> >>>>>>> I'm a newbie, so I don't quite grok the question.  Show
itself
> >>>>>>> doesn't have any references to InputFile.
> >>>>>>
> >>>>>>
> >>>>>> Aha! IIRC, @ManyToOne is only meaningful when used as the back
> >>>>>> side of
> >>>>>> a @OneToMany.
> >>>>>
> >>>>>
> >>>>> We don't have that.  There are reasons, and its intentional.
> >>>>>
> >>>>>>
> >>>>>> What happens if you just use a @OneToOne instead of the  @ManyToOne?
> >>>>>
> >>>>>
> >>>>> The problem is that it's not OneToOne
> >>>>>
> >>>>>
> >>>>>>
> >>>>>> -Patrick
> >>>>>>
> >>>>>> On Nov 5, 2007 9:16 AM, Geir Magnusson Jr. <geir@pobox.com>
wrote:
> >>>>>>
> >>>>>>>
> >>>>>>> On Nov 5, 2007, at 11:48 AM, Patrick Linskey wrote:
> >>>>>>>
> >>>>>>>> Hi,
> >>>>>>>>
> >>>>>>>> What does the other side of the relation look like?
> >>>>>>>
> >>>>>>>
> >>>>>>> I'm a newbie, so I don't quite grok the question.  Show
itself
> >>>>>>> doesn't have any references to InputFile.
> >>>>>>>
> >>>>>>>> Also, what does
> >>>>>>>> the Show class look like?
> >>>>>>>
> >>>>>>>
> >>>>>>> in what way?  Show is a subclass in a JOINED inheritance
> >>>>>>> strategy, if
> >>>>>>> that makes any difference.
> >>>>>>>
> >>>>>>> geir
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>>>
> >>>>>>>> -Patrick
> >>>>>>>>
> >>>>>>>> On Nov 5, 2007 8:08 AM, Geir Magnusson Jr. <geir@pobox.com>
 wrote:
> >>>>>>>>
> >>>>>>>>> I'm a newbie, so forgive me if I'm not asking the
question the
> >>>>>>>>> right
> >>>>>>>>> way.
> >>>>>>>>>
> >>>>>>>>> I have a join table in my DB :
> >>>>>>>>>
> >>>>>>>>> +-------------+------------------+------+-----+---------
+-------+
> >>>>>>>>> | Field       | Type             | Null | Key |
Default |  Extra |
> >>>>>>>>> +-------------+------------------+------+-----+---------
+-------+
> >>>>>>>>> | showId      | int(11) unsigned | NO   | PRI |
         |       |
> >>>>>>>>> | inputFileId | int(11) unsigned | NO   | PRI |
         |       |
> >>>>>>>>> +-------------+------------------+------+-----+---------
+-------+
> >>>>>>>>>
> >>>>>>>>> where showId and inputFileID are PKs in the show
table and
> >>>>>>>>> inputfile
> >>>>>>>>> table.
> >>>>>>>>>
> >>>>>>>>> In my code for the InputFile class :
> >>>>>>>>>
> >>>>>>>>>      @ManyToOne
> >>>>>>>>>      @JoinTable(name="Show2InputFile",
> >>>>>>>>>              joinColumns = @JoinColumn(name="inputFileId"),
> >>>>>>>>>              inverseJoinColumns = @JoinColumn(name="showId"))
> >>>>>>>>>      public Show getShow() {
> >>>>>>>>>          return show;
> >>>>>>>>>      }
> >>>>>>>>>
> >>>>>>>>> When JPA is instrumenting my classes, it complains
:
> >>>>>>>>>
> >>>>>>>>> Caused by: <openjpa-1.1.0-SNAPSHOT-r420667:588533
fatal user
> >>>>>>>>> error>
> >>>>>>>>> org.apache.openjpa.persistence.ArgumentException:
You have
> >>>>>>>>> supplied
> >>>>>>>>> columns for
> >>>>>>>>> "com.joost.model.logistics.InputFile.show<element:class
> >>>>>>>>> java.lang.Object>", but this mapping cannot have
columns in  this
> >>>>>>>>> context.
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>> I don't quite understand the error.  I use this
same thing
> >>>>>>>>> elsewhere
> >>>>>>>>> (I think) w/o a problem.  Can someone give me a
hint?
> >>>>>>>>>
> >>>>>>>>> geir
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> --
> >>>>>>>> Patrick Linskey
> >>>>>>>> 202 669 5907
> >>>>>>>
> >>>>>>>
> >>>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> --
> >>>>>> Patrick Linskey
> >>>>>> 202 669 5907
> >>>>>
> >>>>>
> >>>>>
> >>>>
> >>>>
> >>>>
> >>>> --
> >>>> Patrick Linskey
> >>>> 202 669 5907
> >>>
> >>>
> >>>
> >>
> >>
> >>
> >> --
> >> Patrick Linskey
> >> 202 669 5907
> >
> >
>



-- 
Patrick Linskey
202 669 5907

Mime
View raw message