Mit Spring Hibernate versuche ich, eine Entität zu speichern und ihre ID zu erhalten. Das Speichern funktioniert einwandfrei, aber ich bekomme die ID nicht zurück. Die ID wird auch nicht in die Entität festgelegt, die an die Speichermethode übergeben wird. Die ID-Spalte in meiner Benutzertabelle ist automatisch inkrementiert.
Hier ist mein Java-Code:
@Inject
private SessionFactory sessionFactory;
private Session currentSession() {
return sessionFactory.getCurrentSession();
}
public User save(final User user) {
Serializable id = currentSession().save(user);
LOG.info("id: {}, obj id: {}", (Long)id, user.getId());
//outputs "id: 0, obj id: 0"
return user;
}
Dies ist meine XML-Konfigurationsdatei für den Ruhezustand:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="mypackage.user" table="users">
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="sequence" />
</id>
<property name="username" type="java.lang.String">
<column name="username"/>
</property>
<property name="password" type="java.lang.String">
<column name="password"/>
</property>
</class>
</hibernate-mapping>
Ändern Sie id
den Generator Ihres in identity
und es wird funktionieren (vorausgesetzt, die id
Spalte in Ihrer Datenbank ist auto_increment
). Der IdentityGenerator erwartet Werte, die von einer Identitätsspalte in der Datenbank generiert werden, dh sie werden automatisch inkrementiert. Das Problem bei Ihrer Konfiguration im Ruhezustand besteht darin, dass Sie versuchen, den Sequenzgenerator zu verwenden, ohne die Sequenz zu definieren. Wenn Sie keine Sequenzen in Ihrer Datenbank definiert haben und Ihre id
Spalte eine automatisch inkrementierte Spalte ist, ist die Verwendung des identity
Generators die beste Wahl, da der Ruhezustand die id
von der Datenbank generierte (mithilfe einer Abfrage, um die zuletzt generierte ID abzurufen).
<id name="id" type="java.lang.Long">
<column name="id" />
<generator class="identity" /><!--Changed from sequence to identity-->
</id>
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen