尝试保留具有自动生成的 ID 的新(非托管)实体会导致错误
Trying to persist a new (unmanaged) entity with auto generated ID causes error
我有一个 MyEntity
class 有几列,其中一列是自动递增 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();
出现以下错误:
Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET
SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")
Caused by: java.sql.SQLSyntaxErrorException: Table/View 'SEQUENCE' does not exist.
我尝试更改@GeneratedValue
的策略,但无济于事。网上有很多类似的问题,但是没有明确的解决办法。
我是否需要为新的非托管实体中的 id
列分配特定值?我是否需要在 id
列所在的 table 中设置特定值(我只设置它为主键)?
您使用的是什么数据库?
https://docs.oracle.com/javaee/6/api/javax/persistence/GenerationType.html#AUTO 声明持久性提供程序将选择最合适的解决方案。
如果您使用的是 Hibernate,您是否明确地正确设置了方言?我经常看到 Hibernate 试图猜测正确的方言,但却猜错了。这可能会导致 AUTO 策略选择不当的多米诺骨牌效应。
使用身份通过 DB 生成 ID:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
不要添加 optional=false、nullable=false。 RDBS 中的主键永远不会为空。
我有一个 MyEntity
class 有几列,其中一列是自动递增 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();
出现以下错误:
Query: DataModifyQuery(name="SEQUENCE" sql="UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT + ? WHERE SEQ_NAME = ?")
Caused by: java.sql.SQLSyntaxErrorException: Table/View 'SEQUENCE' does not exist.
我尝试更改@GeneratedValue
的策略,但无济于事。网上有很多类似的问题,但是没有明确的解决办法。
我是否需要为新的非托管实体中的 id
列分配特定值?我是否需要在 id
列所在的 table 中设置特定值(我只设置它为主键)?
您使用的是什么数据库?
https://docs.oracle.com/javaee/6/api/javax/persistence/GenerationType.html#AUTO 声明持久性提供程序将选择最合适的解决方案。
如果您使用的是 Hibernate,您是否明确地正确设置了方言?我经常看到 Hibernate 试图猜测正确的方言,但却猜错了。这可能会导致 AUTO 策略选择不当的多米诺骨牌效应。
使用身份通过 DB 生成 ID:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
不要添加 optional=false、nullable=false。 RDBS 中的主键永远不会为空。