-->
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.  [ 5 posts ] 
Author Message
 Post subject: PrimaryKey (@Id) verschwunden
PostPosted: Fri Dec 04, 2009 6:18 am 
Newbie

Joined: Wed Oct 21, 2009 2:31 am
Posts: 7
Ich habe folgendes Problem:

Wenn ich diese Klasse Speichere und danach abfrage, ist die Id nicht gesetzt;

Code:
@Entity
public class Master implements Serializable {

    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    @Column(name="id")
    private Integer id;

    private String name;

    @Id
    @GeneratedValue(generator="increment")
    @GenericGenerator(name="increment",strategy="increment")
    @Column(name="master_id")
    private int _masterId;

    @Column(name="master_id", insertable=false,updatable=false)
    private int masterId;

    public Master() {
    }

    public Master(String name) {
        this.name = name;
    }

@Override
    public String toString() {
        return "Master:Id=" + id + " MasterId=" + masterId + ",Name=" + name;
    }
}


Ich mache folgendes:

Code:
Session s = HibernateUtil.getCurrentSession();
Master m = new Master("Master1");
            Transaction mtx = s.beginTransaction();
            s.save(m);
            System.out.println(m);
            mtx.commit();
            System.out.println(m);

Beide male erhalte ich folgenden output:
Master:Id=null MasterId=0,Name=Master1
Master:Id=null MasterId=0,Name=Master1

Wieso zum henker, ist die verdammte Id null?

Noch kurioser wird es, wenn ich mir bei der save methode die Id zurück geben lasse und das Objekt in einer eigenen Transaktion laden lasse:

Code:
Session s = HibernateUtil.getCurrentSession();
Transaction tx = s.beginTransaction();
System.out.println(s.get(Master.class, id));
tx.commit();


Auch hier folgt die selbe ausgabe:
Code:
Master:Id=null MasterId=1,Name=Master1


Und noch was, die DB ist eine MS SQL und wenn ich normal einen select mache, ist da das id-Feld gefüllt mit einer id (von der DB)

Ich hoffe jemand kann mir helfen

Danke schon mal


Top
 Profile  
 
 Post subject: Re: PrimaryKey (@Id) verschwunden
PostPosted: Mon Dec 07, 2009 8:06 am 
Newbie

Joined: Thu Dec 03, 2009 5:36 am
Posts: 4
Location: Ulm - Germany
Hallo,
ein Problem was ich hier sehe ist, dass zu einer Entity zwei ID (also Primärschlüssel) angegeben werden. Dies ist meines Wissens nach nicht möglich/sinnvoll, da wenn ich es richtig sehe es sich um einen Surrogatschlüssel handelt und nicht um einen Zusammengesetzten PK.
Ich würde also mich erst mal auf eine ID beschränken.
Gruß - Benedikt Eberhardinger


Top
 Profile  
 
 Post subject: Re: PrimaryKey (@Id) verschwunden
PostPosted: Mon Dec 14, 2009 6:58 am 
Newbie

Joined: Wed Oct 21, 2009 2:31 am
Posts: 7
Ich danke dir recht herzlich für deine antwort.

Was würdest du denn an meiner Stelle tun? DB ist leider ja so vorgegeben. Soll ich also besser einfach, den PK als @Id belassen und beim speichern einfach folgenden Ablauf durchziehen?

1. Speichere Objekt (ohne möchte gerne Id, bz=0)
2. Lade das Objekt
3. Abfrage mit max(möchtegerne Id)
4. Im neuen geladenen Objekt die möchtegerne Id mit dem wert aus der max berechung +1 setzten
5. Objekt wieder speichern

Ich wollte eigentlich nur diesen Aufwand vermeiden, aber wenns nicht anders geht, dann muss ich das leider so machen.

Danke für euere Hilfe


Top
 Profile  
 
 Post subject: Re: PrimaryKey (@Id) verschwunden
PostPosted: Tue Dec 15, 2009 2:26 am 
Senior
Senior

Joined: Tue Oct 28, 2008 10:39 am
Posts: 196
Welches Feld ist denn nun im Sinne der Datenbank der Primärschlüssel? Wenn nur eines der Felder in der Datenbank als PK drin ist, dann mache dieses Feld zur ID. (Sollte man wirklich in MSSQL zwei PKs für eine Tabelle angeben können, die jeder für sich schon PK ist?!?)

Für die möchtegernId würde ich nen Trigger nehmen und das Objekt nach dem Insert nochmal refreshen. Selbst den höchsten Wert auslesen und eins draufaddieren geht leicht in die Hose, wenn ein zweiter das gleichzeitig macht.


Top
 Profile  
 
 Post subject: Re: PrimaryKey (@Id) verschwunden
PostPosted: Tue Dec 15, 2009 6:59 am 
Newbie

Joined: Wed Oct 21, 2009 2:31 am
Posts: 7
Ja das Feld id ist die effektive id (PK).

möchtegerneId ist ein stink normales feld, welches von hand eine "Id" bekommt. Es darf leider keine änderungen an der DB geben (Denn dann würde das Feld gleich hochkannt rausfliegen), womit auch kein Trigger oder änliches erstellt werden darf. Bis anhin wurde die möchtegerneId auch mit auslesen und +1 erstellt.

Ich erhoffte mir nur, dass dieser vorgang autoatisiert wird, aber das scheint so nicht ganz zu gehen. Aber Trozdem möchte ich dir recht danken für deine Antwort.

Grüsse

Gepi


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

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.