Hallo!
Eigentlich handelt es sich nicht um ein 1:1 Mapping, sondern um ein 1:0,1 Mapping. Es sind zwei Tabellen mit demselben primary key, wobei die zweite Tabelle eine optionale zusätzliche Beschreibung beinhaltet.
Hibernate version: hibernate: 3.2.5.ga
hibernate-commons-annotations: 3.3.0.ga
hibernate-annotations: 3.3.0.ga
Classes:Erst die Haupttabelle, die immer da ist (ohne Getter/Setter und unwichtige Attribute):
Code:
@Entity
@Table(name="VORGANG")
public class Vorgang
{
/**
* ZMR-Transaktions-ID
*/
@Id
@Column(name="ZMR_TXID")
private String transactionId;
/**
* Zugehörige Statistik
*/
@OneToOne
@PrimaryKeyJoinColumn
private VorgangsStatistik vorgangsStatistik;
...
Danach die optionale Beschreibungs-Tabelle:
Code:
@Entity
@Table(name="VORGANGSSTATISTIK")
public class VorgangsStatistik
{
/**
* ZMR-Transaktions-ID
*/
@Id
@Column(name="ZMR_TXID")
String transactionId;
/**
* Zugehöriger Vorgang
*/
@OneToOne
@PrimaryKeyJoinColumn
private Vorgang vorgang;
...
Name and version of the database you are using:PostgreSQL 8.2
The generated SQL (show_sql=true):Wenn ich nun
Code:
Vorgang vorgang = vorgangDao.find(transactionId);
aufrufe, wird folgendes Statement abgesetzt:
Code:
select
vorgang0_.ZMR_TXID as ZMR1_3_2_,
vorgang2_.ZMR_TXID as ZMR1_3_1_
from
public.VORGANG vorgang0_
left outer join
public.VORGANGSSTATISTIK vorgangsst1_
on vorgang0_.ZMR_TXID=vorgangsst1_.ZMR_TXID
left outer join
public.VORGANG vorgang2_
on vorgangsst1_.ZMR_TXID=vorgang2_.ZMR_TXID
where
vorgang0_.ZMR_TXID=?
Wieder mit entfernten Datencolumns. Was mich stört, sind die zwei left outer joins. Den zweiten möchte ich auf jeden Fall entfernen, da er bei einer 1:1-Beziehung nicht wieder retour gehen muss, optional würde ich auch gerne den ersten entfernen, da ich den Vorgang suchen und finden möchte, die Statistik aber erst später in einem eigenen Lauf.
Hoffe, das Szenario ist verständlich formuliert.
Könnt Ihr mir da helfen, wär super, hab im Internet nichts gefunden, und sitz jetzt schon ziemlich lange daran.
vielen Dank Christian