[Java lista] JPA 1.0 Kapcsoló tábla External Id-k

Szomor Attila aszomor at computertechnika.hu
2009. Nov. 27., P, 15:59:35 CET


Szia,

A három tábla az OEP által havonta küldött PUPHA egy része "MS Access"-ben  
saját PUPHA-s PK-val kapcsolódnak a szabályrendszerek, amelyek minden  
hónapban eldobódnak és újra generálódnak. Egyszerűen a három táblát  
(értelmezés nélkül) be kell tolni az "A" és "B" táblák betolásából nem jön  
ki a "LinkAB" mert nem OneToOne!
Vagy rosszúl gondolom?

A:
--
@Entity
@SequenceGenerator(name="terapia_eupont_id_seq",sequenceName="terapia_eupont_id_seq")
@Table(
      name="terapia_eupont",
      uniqueConstraints={
              @UniqueConstraint(columnNames={"eupid"})
      }
)
public class TerapiaEupont implements Serializable {
...
       @Column(name="eupid", nullable=false, unique=true)
       private BigInteger eupid;

       @OneToMany(cascade = CascadeType.ALL, mappedBy = "eupontId")
       private Collection<TerapiaBnohozzar> terapiaBnohozzarCollection;

...
}

B:
--
@Entity
@SequenceGenerator(name="terapia_terbno_id_seq",sequenceName="terapia_terbno_id_seq")
@Table(
      name="terapia_terbno",
      uniqueConstraints={
              @UniqueConstraint(columnNames={"eupbnoid"})
      }
)
public class TerapiaTerbno implements Serializable {
...
       @Column(name="eupbnoid", nullable=false, unique=true)
       private BigInteger eupbnoid;

       @OneToMany(cascade = CascadeType.ALL, mappedBy = "bnoId")
       private Collection<TerapiaBnohozzar> terapiaBnohozzarCollection;

...
}

LinkAB:
-------
@Entity
@SequenceGenerator(name="terapia_bnohozzar_id_seq",sequenceName="terapia_bnohozzar_id_seq")
@Table(
      name="terapia_bnohozzar",
      uniqueConstraints={
              @UniqueConstraint(columnNames={"eupont_id","bno_id"})
      }

)
public class TerapiaBnohozzar implements Serializable {
...
       @JoinColumn(name = "eupont_id", referencedColumnName = "eupid")
       @ManyToOne(cascade = CascadeType.ALL, optional = false)
       private TerapiaEupont eupontId;
       @JoinColumn(name = "bno_id", referencedColumnName = "eupbnoid")
       @ManyToOne(cascade = CascadeType.ALL, optional = false)
       private TerapiaTerbno bnoId;

...
}


Attila.

2009.11.27. 15:22:33 dátumon Verhás István <istvan at verhas.com> írta:

> Nem az a problémája, hogy komplett entity vagy csak id hanem az fáj neki
> a második megoldásban, hogy a
>
> new A()
>
> az nem egy menedzselt entitás hanem "csak" egy pojo. És gondolom, hogy a
> cascade nincs megadva annotációban a persistre sem így ezzel nem tud mit
> kezdeni.
> Egyébként meg azt gondolom a kérdésed alapján, hogy még nem sikerült
> elszakadni az adatbázis szintű gondolkodástól és áttérni az objektum
> térbe. Ha meggondolod akkor ez a kapcsoló tábla ugye az objektum térben
> nem is létezik, hanem n-m kapcsolat van az A és a B között. A kapcsoló
> tábla csak a relációs adatbázis kezelőben szükséges egy n-m kapcsolat
> kezeléséhez. Ennek megfelelően a JPA ezt el is rejti előled ha nem
> akarsz vele foglalkozni. Ha más attributum a kapcsoló akkor azt elvileg
> meg tudod adni annotációval és továbbra sem kell, hogy az objektum
> térben legyen számodra direkt elérhető, kezelendő és plusz munkát adó
> entitásod hozzá.
> további részletek :
> http://www.oracle.com/technology/products/ias/toplink/jpa/resources/toplink-jpa-annotations.html#JoinColumn
> "Use the |@JoinColumn| annotation if: ... you want to join using a
> column in the foreign table other than the primary key column"
> üdv


További információk a(z) Javalist levelezőlistáról