Hibernate: Daten speichern



  • 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.

    @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>();
    ...
    }
    
    @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

    user2(userid, name)
    protocol(id, protocol, creation_date, userref)
    
    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:

    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?



  • Ich habe bisher nur mit XML-Mappings gearbeitet. Da würde eine List-Zuordnung beispielsweise so aussehen:

    <list name="protocols" cascade="all">
              <key column="userId"/>
              <index column="inx"/>
              <one-to-many class="daten.Protocol"/>
            </list>
    

    Wobei userId hier ein Feld mit einem primitiven Datentyp ist. Außerdem ist es bei List meines Wissens erforderlich ein Indexfeld anzulegen.


Anmelden zum Antworten