ich eine Abteilung Tischunabhängiges Unternehmen geführt zu beharren, wenn Kennungswert für GenerationType.IDENTITY als Strategie der Bereitstellung der Kennung
Field Type Null Key Default Extra
id int(11) NO PRI auto_increment
name varchar(45) NO UNI
description varchar(100) YES
Hinweis unten Struktur zu erzeugen, die die ID auto_increment (Autonummer) und die Datenbank ist, dass Ich benutze ist MySQL.
Während der Einfügung, wenn ich den Wert für ID angeben, nimmt es diese ID und fügt einen Datensatz ein. In der unteren Anweisung wird ein Datensatz mit der ID = 9 eingefügt.
insert into department values(9, "dept09", "department 09");
Wenn ich für id den Wert nicht angeben, nimmt es den nächsten Wert und fügt einen Datensatz. In diesem Fall wäre die ID 10. Die folgende Anweisung fügt einen Datensatz mit ID = 10 ein.
insert into department(dept_name, description) values("dept10", "department 10");
Meine Abteilung Klasse in Java sieht wie folgt aus. Ich verwende Hibernate/JPA als Persistenzanbieter Ich verwende GenerationType.IDENTITY als Strategie, um den Bezeichner für das Objekt zu generieren.
@Entity
public class Department {
@Id @GeneratedValue(strategy=GenerationType.IDENTITY)
private int id;
private String name;
private String description;
....
}
Ich persistierenden Abteilung wie folgt:
// create and persist an Department
em.getTransaction().begin();
Department dept = new Department();
dept.setId(13);
dept.setName("dept13");
dept.setDescription("Department 13");
em.persist(dept);
em.getTransaction().commit();
Da ich den Wert für id als 13 bereitstellt, erwarte ich, dass ein Datensatz mit id = 13 würde in der Datenbank beibehalten werden , aber überwintert/JPA gibt den Fehler unter:
Exception in thread "main" javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: detached entity passed to persist: com.mycompany.app.Department
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1692)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1602)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1608)
at org.hibernate.jpa.spi.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:1152)
at com.mycompany.services.DepartmentService.createDepartment(DepartmentService.java:21)
Warum wird die neu geschaffene Abteilung als frei stehenden Einheit zu sagen? Wenn ich "dept.setId (13)" auskommentiere, funktioniert es gut und eine Abteilung mit (max ID-Wert in DB) +1 als ID-Wert.
ich überwintern will die id (max id + 1) zur Verfügung zu stellen, wenn die ID nicht oder ist 0. Aber wenn die ID wird bereitgestellt, ich möchte überwintern, um das zu verwenden. Dies ist genau das Verhalten von MySQL. –
Ich weiß nicht, Kumpel, wenn dies möglich ist, da ich auch ein Anfänger im Winterschlaf bin. Kannst du bitte eine neue Frage stellen? Jemand mit mehr Erfahrung könnte eine Antwort dafür haben. – LearningPhase
Wie auch immer, danke für deinen Kommentar. –