Próbuję wstawić do nowego rekordu do mojego postgresql przy użyciu Hibernate i Java EE.Hibernate: zduplikowana wartość klucza narusza wyjątkowe ograniczenie
To jest mój model:
@Entity
@SuppressWarnings("serial")
@Inheritance(strategy=InheritanceType.JOINED)
public class BaseDesign implements Serializable {
@Id
@Expose
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", updatable = false, nullable = false)
private Long id;
@Version
@Column(name = "version")
private int version;
@Expose
@Column(name = "name")
private String name;
// getter and setter
}
I tu jest moje import.sql
INSERT INTO basedesign (id, name, version) VALUES (1, 'China', 0);
Kiedy zbudować kod, rekord jest dodawany do db.
Jednak gdy próbuję dodać nowy rekord używając EntityManager, jak to:
BaseDesign design = new BaseDesign();
design.setName("USA");
em.persist(design);
mam:
Caused by: org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "basedesign_pkey"
Detail: Key (id)=(1) already exists.
Wykonaj tę samą komendę po raz drugi, a to sukces.
Dlaczego funkcja hibernacji nie zwiększa początkowego identyfikatora po raz pierwszy? I jak skonfigurować, aby rozpocząć od ostatniej wstawionej liczby całkowitej?
Więc to rozwiązanie musi przypisać znany numer do niego? Nie może automatycznie odebrać ostatniego identyfikatora? – VHanded
Problemem jest instrukcja wstawiania instrukcji SQL, która ręcznie wstawiła identyfikator. System może automatycznie odbierać identyfikatory pod warunkiem, że * zawsze * pozwala systemowi generować identyfikator i nigdy nie podaje wartości dla kolumny id. –
Dzięki. To, co próbuję osiągnąć, to tworzenie kopii zapasowych i przywracanie. Kiedy generuję plik zrzutu z DB, przychodzi z instrukcją INSERT z identyfikatorem. Ponieważ ten identyfikator nie jest generowany przez DB, spowodował powyższy problem. – VHanded