openjpa-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Geir Magnusson Jr." <g...@pobox.com>
Subject Re: Problem with @ManyToOne and @JoinTable
Date Tue, 06 Nov 2007 02:02:05 GMT

On Nov 5, 2007, at 8:22 PM, Patrick Linskey wrote:

>> 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.

I tried that after sending the mail below, and it worked.

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

Why?

>
> -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