当前位置: 首页 > 面试题库 >

@GeneratedValue(strategy = GenerationType.AUTO)无法正常工作

段超
2023-03-14
问题内容

我正在尝试将对象持久化到数据库。不断获取“列ID无法接受空值错误”。我的对象看起来像这样:

    @Entity
public class TestTable {
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Integer id = 0;

    @Column(nullable=false, length=256)
    private String data = "";

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getData() {
        return data;
    }

    public void setData(String data) {
        this.data = data;
    }

}

我的持久功能:

public static synchronized boolean persistObject(Object obj){
        boolean success = true;
        EntityManager em = null;
        EntityTransaction tx = null;
        try{
            em = getEmf().createEntityManager();
            tx = em.getTransaction();
            tx.begin();
            em.persist(obj);
            tx.commit();

        } catch (Exception e){
            success = false;
        } finally{
            try{
                em.close();
            } catch(Exception e){
                //nothing
            }
        }
        return success;
    }

问题答案:

您可以使用GenerationType.TABLE。这样,jpa将序列表用于ID分配,您可能永远不需要生成序列或自动递增值或触发可移植性的触发器。

另请注意,在java中,int类型默认使用0初始化,因此您也可以摆脱它。



 类似资料:
  • 例如,如果我希望生成的ID开始为100,XXX而不是10,XXX并增加100,我将如何进行更改? 请帮个忙。提前谢了。

  • 问题内容: 我使用在我的实体上生成ID。 我现在不知道它是如何工作的,但是在我的子表上,它会生成遵循父序列的ID值。 在父级上插入的ID值将更新序列。在子级上插入的ID值将更新序列。在下一个父项插入中,序列…使用由子项插入更新的值… 此注释不会创建两个序列,而只会创建一个。这是正确/预期的吗? 我仅使用插入了具有DAO服务的实体 ; 问题答案: 这些注释不会创建两个序列,而只会创建一个。这是正确/

  • 问题内容: 我是新来的hibernate。我不了解以下两种主要的密钥生成策略: 身分识别 序列 有人可以解释这两个是如何工作的,两者之间有什么区别? 问题答案: 引用Java持久性/标识和排序: 身份 排序使用数据库中的 特殊IDENTITY列 来允许数据库在插入对象的行时自动为其分配ID。许多数据库(例如 MySQL,DB2,SQL Server,Sybase和Postgres) 都支持标识列。

  • 问题内容: 我有一个hibernate实体,其ID配置为 在第一次运行中,可以正常创建新元素。但是,如果我重新启动应用程序并取回记录,则下次我尝试保留该实体时,hibernate将尝试使用未重新启动应用程序时生成的相同ID。 我收到以下错误,并且在使用trace选项运行时,我能够看到ID被重用了 hibernate状态:将值(?,?,?)插入到org_myEntity(entitiyJID,ent

  • 问题内容: 因此,我的设置无法按我想要的方式工作。因此,每当我运行该程序时,它就会立即从0变为100。我尝试使用,任务,并尝试了,但没有任何尝试。 这是我的程序: @MadProgrammer这是我尝试做一名摆动工作人员并将每个名称写入文档并更新进度栏的尝试。该程序将达到86%左右并停止运行,永远不会创建完成的文档。该程序将创建一个空白文档。这是我首先创建的SwingWorker对象,这是两种方法

  • 问题内容: 我在JLayeredpane上有两个JPanels。其中一个显示pdf,重叠的一个具有透明背景(我使用过setOpaque(false))。现在,我可以将图形添加到透明面板中,这样看来我实际上是在注释pdf。我想要一个橡皮擦工具来删除这些注释。我尝试使用以下代码 其中path是由多条线构成的形状。现在,不是在先前的图形上绘制 透明线 ,而是绘制 黑线 。我要去哪里错了? 问题答案: 请