-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 
Author Message
 Post subject: JPA+Hibernate, 'shared key one-to-one'-Mapping Problem
PostPosted: Thu Feb 14, 2008 4:02 pm 
Newbie

Joined: Thu Feb 14, 2008 3:26 pm
Posts: 1
Hallo!

Ich habe die Aufgabe eine bestehende Tabellenstruktur zu mappen.

Ein wirklich hartnäckiges Problem habe ich beim Mappen einer 1:1-Verbindung die einen gemeinsamen Schlüssel benutzen soll. Dieser ist zudem als 'IDENTITY' definiert.

Meine bisherigen Versuche sehen so aus:

Code:
@Entity
public class Parent {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id ;

    @OneToOne(optional = false, fetch = FetchType.EAGER, cascade = CascadeType.PERSIST)
    @PrimaryKeyJoinColumn
    @JoinColumn(name = "id")
    private Child child;
   
   
    public Parent(Object ...) {  // Stuff for initialising domain-object
      ...
       Child.create(this) ;
    }
   
   ...
}


@Entity
public class Child {

    @Id
    @GeneratedValue(generator = "myIdGenerator")
    @GenericGenerator(name = "myIdGenerator", strategy = "foreign", parameters = @Parameter(name = "property", value = "parent"))
    private Long id ;

    @OneToOne(mappedBy = "child")
    @JoinColumn(name="id")
    private Parent parent ;
   
    protected Child(Parent parent) {
       this.parent = parent ;
       parent.setChild(this) ;
    }
   
    public static Child create(Parent parent) {
      
      return null != parent ? new Child(parent) : null ;
    }
   
    ...
}


Zumindest theoretisch sollte das alles so stimmen :)

Wenn ich nun eine neues 'Parent-Objekt' anlegen und speichern möchte, bekomme ich folgenden Fehler:

Code:
Caused by: org.hibernate.id.IdentifierGenerationException: null id generated for:class Child


Der Code zum Erzeugen/Speichern sieht wie folgt aus:

Code:
Parent parent = new Parent(blablabla) ;
entityManager.persist(parent) ;


Ich bin ratlos :( Mir ist zwar klar, dass zum Zeitpunkt des Speicherns noch kein PK für 'Parent' bekannt ist, aber ich hoffte, dass Hibernate bzw. JPA das schon 'irgendwie' macht.

Ich befürchte, dass dieses Mapping in Verbindung mit einer Identity nicht zu lösen ist?

Leider habe ich keinen Einfluss mehr auf das Datenbank-Design.

Ziel sollte es sein, 'Child' bei jedem Anlegen eines neuen 'Parent' mit anzulegen und zur Verfügung zu haben beim Laden eines 'Parent'.
'Child' selbst wird 'heftigst' von anderen Prozessen (kein Java) geupdatet, d.h. es sollen keine Updates geschrieben/getätigt werden, wenn ich 'Parent' speichere.

Falls jemand eine Idee hat - auch gerne eine, wie ich das anders lösen kann - bin ich wirklich sehr dankbar.

Ich sitze nun schon seit Tagen an diesem Problem.

Festgefahren :(

Vielen Dank schon vorab!

Viele Gruesse
Gersch


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 1 post ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.