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:22:43 GMT
> 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.

I believe that what you're describing is a unidirectional one-to-one
with a join table. I think that you can model this with a secondary
table.

@ManyToOne sounds like it's describing an ER concept, but I believe
that in reality, it's reserved for the backpointer of a @OneToMany.

-Patrick

On 11/5/07, Geir Magnusson Jr. <geir@pobox.com> 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