-->
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.  [ 3 posts ] 
Author Message
 Post subject: Aufzählungen
PostPosted: Mon Jan 23, 2006 11:04 am 
Newbie

Joined: Wed Jan 11, 2006 5:15 am
Posts: 15
Hallo, ich versuche die ganze Zeit wie doof Enum's persisten zu machen und habe die zwei auffindbaren Wege für Version 2.xx (Klasse PersistentEnum...) und für Version 3.xx (UserType) ausprobiert. Aber auf gut deutsch ist das alles Scheiße, bzw. ich bin zu doof.
Das Hauptärgernis liegt in beiden fällen darin, dass die Enums zwar inerhalb des selben Programmlaufs wunderbar funktionieren, aber beim nächsten start die schon gespeicherten objekte nicht automatisch "widererkannt" werden.

Hat das problem hier schon jemand gehabt und gelöst? Für "gute" Ansätze wäre ich wirklich dankbar.

Gruß Martin

Hibernate version:
3.x


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 09, 2006 5:54 am 
Expert
Expert

Joined: Tue Dec 07, 2004 6:57 am
Posts: 285
Location: Nürnberg, Germany
Enums würd ich generell als UserType mappen. Die sind sehr mächtig und mit sicherheit nicht "scheisse".

Zeig mal dein mapping file. Was meinst du mit
Quote:
aber beim nächsten start die schon gespeicherten objekte nicht automatisch "widererkannt" werden.


Top
 Profile  
 
 Post subject:
PostPosted: Thu Feb 09, 2006 6:30 am 
Newbie

Joined: Wed Jan 11, 2006 5:15 am
Posts: 15
Antwortet doch jemand :o)
Nun ich habe das Problem jetzt so gelöst, das ich diese Enums als @hibernate.component ablege - also nur den entsprechenden Aufzählungswert. Die "richtigen" Objekte werden per readResolve() gefunden.
Zuvor hatte ich versucht die ganzen Objekte abzulegen...
Kurzes Beispiel:

/** @hibernate.class table = "Xyz" */
class Xyz {
int id;
int const;
String irgendwas;

public static final Xyz BUH = new Xyz (1, "BUH");
public static final Xyz HAH = new Xyz (2, "HAH");

Xyz (int i, String s){...}

/** @hibernate.id generator-class = "native" column = "id" */
public int getId() {...}

/** @hibernate.property column = "const" */
public int getConst() {...}

/** @hibernate.property column = "Irgendwas" length="31" */
public String getIrgendwas() {...}

}

/** @hibernate.class ...*/
class Abc {
...
private Xyz x;

/** @hibernate.many-to-one column = "FK_Xyz" */
public Xyz getX() {...}
}

Nun wird das prog gestartet -> irgendwas tun -> Xyz initialisiert
-> BUH.id == 0 -> BUH wird in DB gespeichert -> exit()

Nun wird das prog gestartet -> irgendwas tun (nichts aus DB laden)
-> Xyz initialisiert -> BUH.id == 0 -> BUH wird in DB gespeichert - das zweite mal!!

Mit einer extra Factory könnte man zwar die DB befragen, ob es dieses Objekt schon gibt, aber ich habe hier ca. 900 Klassen und bin bei 70 Tabellen im Moment - das wird einfach alles zu aufwendig ;o)

Also habe ich es so gelöst:

class Xyz {

int const;
String irgendwas;

public static final Xyz BUH = new Xyz (1, "BUH");
public static final Xyz HAH = new Xyz (2, "HAH");

Xyz (int i, String s){...}

/** @hibernate.property
* @hibernate.column name = "const" */
public int getConst() {...}

public String getIrgendwas() {...}

public Object readResolve()
{..... return BUH;}
}

/** @hibernate.class ...*/
class Abc {
private Xyz x;

/** @hibernate.component prefix="X_" */
public Xyz getX() {...}
}

Mich würde trotzdem interessieren, wie man das noch lösen kann!!! :o)


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 3 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.