Я пытаюсь вставить некоторые поддельные данные в базу данных SQL Server Express. Я использую простой код:
@Entity
@Table(name = "People")
public class Peeps implements Serializable {
@Id
@Column(name = "ID", columnDefinition = "Decimal(10,0)")
private String id;
@Column(name = "PERSON_NAME")
private String name;
}
Я вызываю диспетчер сущностей для создания вышеуказанного класса следующим образом:
private EntityManager em = createManager();
private EntityTransaction utx = em.getTransaction();
final Peeps entity = new Peeps();
entity.setId("10002");
entity.setName("Joe");
utx.begin();
em.persist(entity);
utx.commit();
Однако при этом я получаю сообщение об ошибке ::
Cannot insert explicit value for identity column in table 'People' when IDENTITY_INSERT is set to OFF
Поэтому я попытался сделать что-то вроде этого:
em.createNativeQuery("SET IDENTITY_INSERT People ON").executeUpdate();
em.persist(entity);
em.createNativeQuery("SET IDENTITY_INSERT People OFF").executeUpdate();
Тем не менее, я по-прежнему получаю ту же ошибку. Моя интуиция заставляет меня думать, что связь не разделяется. Есть ли что-то, что я могу сделать, чтобы проинструктировать спящий режим, чтобы установить IDENTITY_INSERT в ON, прежде чем я буду ссылаться на мое упорство?
Вам не хватает следующей строки под полем id:
@GeneratedValue(strategy=GenerationType.IDENTITY)
Итак, ваше поле id должно выглядеть так:
@Entity
@Table(name = "People")
public class Peeps implements Serializable {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "ID", columnDefinition = "Decimal(10,0)")
private String id;
@Column(name = "PERSON_NAME")
private String name;
}
Во-вторых, вы не должны сами устанавливать идентификатор для своего объекта, ID будет сгенерирован автоматически, когда вы будете продолжать его использовать спящий режим.
поэтому избавьтесь от: entity.setId("10002");
и просто сделайте это:
private EntityManager em = createManager();
private EntityTransaction utx = em.getTransaction();
final Peeps entity = new Peeps();
entity.setName("Joe");
utx.begin();
em.persist(entity);
utx.commit();
что-то еще убедитесь, что вы настроили свой первичный ключ в своей таблице БД с автоматическим приращением.