java - 使用 JPA 的 IDENTITY_INSERT

标签 java hibernate jpa

我正试图将一些虚假数据插入到 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();

但是,我仍然得到同样的错误。我的直觉使我相信连接没有被共享。在我调用我的持久性之前,我可以做些什么来指示 hibernate 将 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,当您使用 hibernate 持久保存它时,该 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();

确保您在数据库表中配置了主键,并自动递增。

关于java - 使用 JPA 的 IDENTITY_INSERT,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39919674/

相关文章:

java - 坚持使用 hibernate/JPA

java - 连接列留空

java - Gradle setupBuild 不转换 Maven pom.xml 文件

java - 如何使用 hibernate 和 postrgresql 跨程序的多个实例锁定记录?

java - 如何使用 JSON 解析从任何 url 解析数据

java - hbm2ddl.auto 设置为更新时 hibernate 错误

hibernate - 如何在 spring data jpa 中使用预测和规范?

java - Hibernate 查询(不是 SQL)日志记录

Java 树节点 : How to prevent getChildCount from doing expensive operation?

java - 如何使用javaFX播放多个连续的声音文件?