Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 尝试使用自动生成的ID持久化新(非托管)实体会导致错误_Java_Jpa_Derby - Fatal编程技术网

Java 尝试使用自动生成的ID持久化新(非托管)实体会导致错误

Java 尝试使用自动生成的ID持久化新(非托管)实体会导致错误,java,jpa,derby,Java,Jpa,Derby,我有一个MyEntity类,它有几列,其中一列是自动递增id。MyEntity如下所示: @Id @GeneratedValue(strategy=GenerationType.AUTO) @Basic(optional = false) @Column(nullable = false) private Long id; 当我创建一个新的MyEntity并设置所有其他列(我不设置id列),然后调用persist: MyEntity mn = new MyEntity("val1", "val

我有一个
MyEntity
类,它有几列,其中一列是自动递增id。
MyEntity
如下所示:

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Basic(optional = false)
@Column(nullable = false)
private Long id;
当我创建一个新的
MyEntity
并设置所有其他列(我不设置id列),然后调用
persist

MyEntity mn = new MyEntity("val1", "val2");
em.getTransaction().begin();
em.persist(mn);
em.getTransaction().commit();
em.close();
出现以下错误:

查询:DataModifyQuery(name=“SEQUENCE”sql=“更新序列集 序号计数=序号计数+?其中序号名称=?“”)

原因:java.sql.SQLSyntaxErrorException:表/视图“序列”不存在

我试图改变
@GeneratedValue
的策略,但没有成功。网上有很多类似的问题,但没有明确的解决方案,在这种情况下该怎么办


我是否需要为新的非托管实体中的
id
列指定特定值?是否需要在
id
列所在的表中设置特定值(我只设置它是主键)?

您使用的是什么数据库

声明持久性提供程序将选择最合适的解决方案


如果您使用的是Hibernate,您是否正确地显式设置了方言?我经常看到Hibernate试图猜出正确的方言,但猜错了。这可能会造成自动策略选择不当的多米诺效应。

使用标识由DB生成ID:

@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;

不要添加optional=false,nullable=false。在RDB中,主键永远不会为空。

paste pesrsistence.xml这确实有效,我之前也使用过它。我相信问题出在我的表和我创建主键的方式上。不幸的是,我不确定出了什么问题,但我认为Netbeans derby插件的Add列中的“增量1”解决了这个问题。哦,还有一件重要的事情我忘了提到。如果从Netbeans中的数据库自动生成类,则所有新创建的类都需要用户在其构造函数中设置ID。我传递了0和其他值,希望它们被忽略,但最终从构造函数中删除了ID并添加了标识策略。