[
Date Prev][
Date Next][
Thread Prev][
Thread Next][
Date Index][
Thread Index]
[
List Home]
Re: [eclipselink-users] question about one-to-many
|
Hi Zachary,
> If I'm understanding your question correctly you want a bi-directional
> relationship between Zutat and Rezept with Rezept being the owning side
> of the relationship.
no, that I figured. I want a uni-directional mapping from Rezept 1 -> 8 Zutat
(using @OneToMany).
Best regards, --- Jan.
> Rezept needs to have:
>
> @OneToMany(mappedBy="rezept")
> private List<Zutat> zutats;
>
> and Zutat needs to have:
>
> @ManyToOne
> @JoinColumn(name="rezid" referencedColumnName="id")
> private Rezept rezept; //note that the field name is what is used in
> the 'mappedBy' attribute on the owning side
>
> Hopefully that helps,
>
> -zach
>
> On Oct 14, 2008, at 9:59 AM, Jan Kriesten wrote:
>
>>
>> Hi,
>>
>> I've an understanding problem using one-to-many:
>>
>> I've got the following tables:
>>
>> REZ_REZEPTE:
>> id: int
>> name: String
>>
>> REZ_ZUT:
>> id: int
>> rezid: int
>> name: String
>>
>> Now I want to have a List of all REZ_ZUT in REZ_REZEPTE.
>>
>> This actually works:
>>
>> @Entity
>> @Table { val name = "REZ_REZEPTE" }
>> @serializable
>> class Rezept {
>> @Id @GeneratedValue
>> @BeanProperty var id: Int = _id
>> @BeanProperty var name: String = _name
>> @OneToMany { val cascade = Array( CascadeType.ALL ), val targetEntity =
>> classOf[Zutat], val mappedBy = "rezept" }
>> @BeanProperty var zutaten: JList[Zutat] = null
>> }
>>
>> But this needs class Zutat mapping back to 'Rezept'.
>>
>> It should work to use
>>
>> @OneToMany { val cascade = Array( CascadeType.ALL ), val targetEntity =
>> classOf[Zutat], val fetch=FetchType.EAGER }
>> @JoinColumn { val name = "rezid" }
>> @BeanProperty var zutaten: JList[Zutat] = null
>>
>> but that give an error:
>>
>> Internal Exception: Exception [EclipseLink-7160] (Eclipse Persistence
>> Services -
>> 1.0.1 (Build 20080905)):
>> org.eclipse.persistence.exceptions.ValidationException
>> Exception Description: @OneToMany for attribute name [zutaten] in
>> entity class
>> [class Rezept] should not have @JoinColumn(s) specified. In the case
>> where the
>> @OneToMany is not mapped by another entity (that is, it is the owning
>> side and
>> is uni-directional), it should specify (optional through defaulting) a
>> @JoinTable.
>>
>> I tried to use the xml-variant instead (which at least allows to define
>> join-columns):
>>
>> <entity class="Rezept">
>> <attributes>
>> <id name="id"><generated-value /></id>
>> <one-to-many name="zutaten" target-entity="Zutat" fetch="EAGER">
>> <join-column name="rezid"/>
>> </one-to-many>
>> </attributes>
>> </entity>
>>
>> But that gives a SQL-Exception - and I really don't know why
>> EclipseLink is
>> trying to access a table named "rez_rezepte_rez_zut":
>>
>> Exception [EclipseLink-4002] (Eclipse Persistence Services - 1.0.1 (Build
>> 20080905)): org.eclipse.persistence.exceptions.DatabaseException
>> Internal Exception:
>> com.mysql.jdbc.exceptions.MySQLSyntaxErrorException: Table
>> 'rez_rezepte_rez_zut' doesn't exist
>> Error Code: 1146
>> Call: SELECT t1.ID, t1.EINHEIT, t1.MENGE_MAX, t1.MENGE_MIN, t1.MENGE_ORG,
>> t1.NAME, t1.REZID FROM REZ_REZEPTE_REZ_ZUT t0, REZ_ZUT t1 WHERE
>> ((t0.Rezept_ID =
>> ?) AND (t1.ID = t0.zutaten_ID))
>>
>> Can someone give me some insight where I'm going wrong?
>>
>> Best regards, --- Jan.
>>
>> _______________________________________________
>> eclipselink-users mailing list
>> eclipselink-users@xxxxxxxxxxx
>> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>
> _______________________________________________
> eclipselink-users mailing list
> eclipselink-users@xxxxxxxxxxx
> https://dev.eclipse.org/mailman/listinfo/eclipselink-users
>
--
--------------------------------------------------
sign of renitence gmbH & co. kg
Büro Hamburg
Kelterstr. 23
D-22391 Hamburg
Germany
fon +49-40-27805130
fax +49-40-27805131
www.renitence.de
www.webnix.de
www.projektnix.de
Geschäftsleitung
Jörg Schmidt-Stein
Susanne Stein
Jan Kriesten
Gerichtsstand Nürnberg
hr a 12518
USt.-IdNr.: DE194293429
St.-Nr. 238 174 01201