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 <[EMAIL PROTECTED]> 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. <[EMAIL PROTECTED]> 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. <[EMAIL PROTECTED]> 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. <[EMAIL PROTECTED]> 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. <[EMAIL PROTECTED]>
> >>>>>>>> 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