openjpa-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Marco de Booij <marco.developm...@debooy.eu>
Subject Re: Mapping a Join Table with Additional Columns
Date Mon, 27 Apr 2015 18:26:47 GMT
The problem is that the join-table has a field (AUTEUR_TYPE) that I need 
to fill. With the ManyToMany I do not have this possibility.

Regards,

Marco

Op 27-04-15 om 13:35 schreef Mark Struberg:
> Why don’t you use a @ManyToMany relation?
>
> LieGrue,
> strub
>
>
>> Am 26.04.2015 um 17:57 schrieb Marco de Booij <marco.development@debooy.eu>:
>>
>> I use Tomee 1.7.1 with openjpa version openjpa-2.4.0-nonfinal-1598334-r422266.
>>
>> I have an entity auteurs and an entity boek. They have a ManyToMany relation through
the entity auteurs_boeken. In this entity there is a field type to define the type of the
relation (writer, illustrations, ...). I followed the https://en.wikibooks.org/wiki/Java_Persistence/ManyToMany
page and came up with the following classes (left out all constructors, getters, and setters):
>>
>> =====
>> @Entity
>> @Table(name="AUTEURS", schema="BYBLOS")
>> public class AuteurDto
>>     extends Dto implements Comparable<AuteurDto>, Cloneable {
>>   private static final  long  serialVersionUID  = 1L;
>>
>>   @Id
>>   @GeneratedValue(strategy=GenerationType.IDENTITY)
>>   @Column(name="AUTEUR_ID", nullable=false, unique=true)
>>   private Long    auteurId;
>>   @Column(name="NAAM", length=100, nullable=false)
>>   private String  naam;
>>   @Column(name="VOORNAAM", length=100)
>>   private String  voornaam;
>>
>>   @OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY, mappedBy="auteur")
>>   private List<AuteurBoekDto> boeken;
>> }
>>
>> =====
>> @Entity
>> @Table(name="BOEKEN", schema="BYBLOS")
>> public class BoekDto extends Dto implements Comparable<BoekDto>, Cloneable
{
>>   private static final  long  serialVersionUID  = 1L;
>>
>>   @Id
>>   @GeneratedValue(strategy=GenerationType.IDENTITY)
>>   @Column(name="BOEK_ID", nullable=false, unique=true)
>>   private Long    boekId;
>>   @Column(name="DEEL", precision=5, scale=0)
>>   private Integer deel;
>>   @Column(name="DRUK", precision=3, scale=0)
>>   private Integer druk;
>>   @Column(name="ISBN", length=13)
>>   private String  isbn;
>>   @Column(name="JAAR_UITGAVE", precision=4, scale=0)
>>   private Integer jaarUitgave;
>>   @Column(name="SUBDEEL", length=2)
>>   private String  subdeel;
>>   @Column(name="TAAL", length=2, nullable=false)
>>   private String  taal;
>>   @Column(name="TITEL", length=100, nullable=false)
>>   private String  titel;
>>
>>   @OneToOne(cascade=CascadeType.ALL, fetch=FetchType.LAZY)
>>   @JoinColumn(name="SERIE_ID", nullable=false, updatable=false)
>>   private SerieDto  serie;
>>
>>   @OneToMany(mappedBy="boek", fetch=FetchType.LAZY)
>>   private List<AuteurBoekDto> auteurs;
>> }
>>
>> =====
>> @Entity
>> @Table(name="AUTEURS_BOEKEN", schema="BYBLOS")
>> @IdClass(AuteurBoekPK.class)
>> public class AuteurBoekDto
>>     extends Dto implements Comparable<AuteurBoekDto>, Cloneable {
>>   private static final  long  serialVersionUID  = 1L;
>>
>>   @Id
>>   private Long    auteurId;
>>   @Id
>>   private Long    boekId;
>>   @Column(name="AUTEUR_TYPE", nullable=false, length=1)
>>   private String  auteurType;
>>
>>   @ManyToOne
>>   @PrimaryKeyJoinColumn(name="AUTEUR_ID", referencedColumnName="auteurId")
>>   private AuteurDto auteur;
>>   @ManyToOne
>>   @PrimaryKeyJoinColumn(name="BOEK_ID", referencedColumnName="boekId")
>>   private BoekDto   boek;
>> }
>>
>> When I fetch the boeken from within the AuteurDto I get the message:
>> <openjpa-2.4.0-nonfinal-1598334-r422266:1599166 fatal user error> org.apache.openjpa.persistence.ArgumentException:
"eu.debooy.byblos.domain.AuteurBoekDto.auteur" defines a target of "auteurId" for column "AUTEUR_ID",
but that target does not exist in table "BYBLOS.AUTEURS".
>> I have the same problem on the BoekDto. BoekDto has a OneToOne relation with SerieDto
and when I read the boeken from there I get the correct boeken so I guess that the problem
lies with my implementation of the ManyToMany. Can someone show me the way to the correct
implementation?
>>
>> Regards,
>>
>> Marco
>


Mime
View raw message