Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 单位工作克隆sqlite中的主键为Null或零_Java_Sqlite_Jpa - Fatal编程技术网

Java 单位工作克隆sqlite中的主键为Null或零

Java 单位工作克隆sqlite中的主键为Null或零,java,sqlite,jpa,Java,Sqlite,Jpa,您好,我对JPA和SQLite有问题 我在SQLite中有一个名为Category的表。这是此表的结构: Category: catID INTEGER Primary Key catName TEXT 现在我正试图通过JPA插入一个新类别。 这是我的方法: public void insertCategory(EntityManager em, String catName) { Category cat = new Category(); cat.setCatName(ca

您好,我对JPA和SQLite有问题

我在SQLite中有一个名为Category的表。这是此表的结构:

Category:
catID INTEGER Primary Key
catName TEXT
现在我正试图通过JPA插入一个新类别。 这是我的方法:

public void insertCategory(EntityManager em, String catName) {
    Category cat = new Category();
    cat.setCatName(catName);
    em.getTransaction().begin();
        em.persist(cat);
        em.flush();
    em.getTransaction().commit();
}
现在我在em.flush()上有一个执行选项。 例外情况是

Null or zero primary key encountered in UnitOfWork clone
我知道这是因为对象猫。catID仍然为空。 该类看起来像:

@Entity
@Table(name="Category")
public class Category implements Serializable {
    private static final long serialVersionUID = 1L;

    @Column(name="catName")
    private String catName;

    @Id
    @Column(name="catID")
    private Integer catID;
    + Getter and Setter
}

当查询中没有给出主键时,SQLite会自动递增主键。如何在不出现此异常的情况下通知程序要运行的主键???

谢谢Mick Mnemonic的帮助。你最后的回答帮助了我。 我必须生成新的数据库,并将autoincrement参数添加到主键中。然后生成sqlite_序列表。现在我可以通过JPA在数据库中插入Entitys,而不会出现任何异常

这是我的生成器注释:

@GeneratedValue(generator="sqlite")
@TableGenerator(name="sqlite", table="sqlite_sequence", 
                pkColumnName = "name", valueColumnName = "seq",
                pkColumnValue = "Section", initialValue = 1,
                allocationSize = 1)

最后两个参数是必需的,因为jpa似乎将+50添加到sqlite_seq表中的值,sqlite从1开始自动递增值。

可能会有所帮助。我尝试过这个解决方案,但后来我变成了异常SQL错误或缺少数据库(没有这样的表:序列)。我认为这对SQLite不起作用。请尝试使用
@GeneratedValue
(不带参数)简单地注释
catID
。Sequence是Oracle的一个概念。这给了我和以前一样的异常好吧,看来SQLite有点特别。有一个建议你可以试试。我想顺便说声谢谢,因为这有助于我解决Java项目中经常遇到的一个问题。我建议用一个示例实体发布一个修订版,以便后面的其他用户可以看到这些注释应该放在哪里。