Daten speichern

Status
Nicht offen für weitere Antworten.
V

Verus

Gast
Moin,

ich veruche mich gerade mit Hibernate und habe dabei folgendes Problem:

Ich habe zwei Klassen. Die Klasse Protocol ist Bestandteil von User.
Wenn ich User in der Datenbank speichere, dann wird für das Protocol nicht der User referenziert.

Code:
@Entity 
@Table(name="user2") 
public class User 
{ 
    @Id 
    @GeneratedValue 
    @Column(name="userid") 
    private int             id; 
    
    private String             name = ""; 
    
    @OneToMany(mappedBy="user", cascade= CascadeType.ALL) 
    private List<Protocol>    m_protocols = new Vector<Protocol>(); 
... 
}
Code:
@Entity 
public class Protocol 
{ 
    @Id 
    @GeneratedValue 
    private int            id; 
    private byte[]            protocol; 
    private Timestamp        creationDate; 
    
    @ManyToOne 
    @JoinColumn(name = "userref") 
    private User            user; 
... 
}
Meine Tabellen haben folgenden Aufbau
Code:
user2(userid, name) 
protocol(id, protocol, creation_date, userref)
Code:
User user = new User("test2"); 
byte[] bytes = new byte[...]; 
Timestamp t = ... 
... 
Protocol p = new Protocol(t, bytes); 
user.addProtocol(p); 
... 
session.save(user);
Die Datenbank sieht danach so aus:
Code:
user2 
1, 'test2' 

protocol 
1, 2008-04-07 10:38:41.52+02, <binär Daten>, <leer>

Wenn ich jetzt ein User-Objekt anlege und dem ein Protocol hinzufüge und das ganze dann speichere, dann wird leider kein Wert für userref eingetragen. Dieser wird aber benötigt, wenn Daten aus der Datenbank gelesen werden.
Wie bekomme ich das hin, dass auch die userref (also die userid) in die Datenbank geschrieben wird?
 
I

ign0rant

Gast
Vermutlich fehlt in deiner User.addProtocol Methode noch ein:

Code:
protocol.setUser(this);
 
V

Verus

Gast
@ign0rant

Danke, da hat wirklich nur der Aufruf gefehlt.

@maki

Wieso ist Vector pfui?
 
M

maki

Gast
Vector ist alt, "legacy", sollte nicht verwendet werden, ausser er ist unbedingt nötig.

Das Java Collection Framework ist zu verwenden, falls möglich ;)
Da haste dann zB. Listen.
 
G

Guest

Gast
Deine Antwort verstehe ich nicht so recht.

Vector ist doch im Java Collections Framework. Und welche Listen meinst du speziell? ArrayList, LinkedList?
 

y0dA

Top Contributor
Vector gibt es halt schon seit dem JDK 1.0 und jenes hat nicht den besten Ruf (Typsicherheit - mittlerweile durch Generics behoben; wichtigsten Methoden sind synchronzid - nicht sehr performant).

Du solltest dir halt überlegen welche List das richtige für dich ist:
+)Ist die Liste eher klein u du hast mehr wahlfreie Zugriffe als Einfüge/Lösch-operationen dann nimmst du am besten eine ArrayList
+)Wird die Liste viele Elemente beinhalten und liegt der Schwerpunkt bei Einfüge/Löschoperationen nimmst du eine LinkedList.
+)Vector würde ich nur benutzen wenn ich einen synchronisierte Liste benötige.
 
G

Guest

Gast
y0dA hat gesagt.:
+)Vector würde ich nur benutzen wenn ich einen synchronisierte Liste benötige.
Das ist auch nicht mehr nötig. Man kann jede Liste/Collection Threadsafe machen
Code:
List<Moneten> list = Collections.synchronizedList(new LinkedList<Moneten>());
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen

Ähnliche Java Themen

Neue Themen


Oben