我有一个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 =“UPDATE SEQUENCE SET SEQ_COUNT = SEQ_COUNT +?WHERE SEQ_NAME =?”)
引起:java.sql.SQLSyntaxErrorException:表/视图'SEQUENCE'不存在。
我试图改变@GeneratedValue
的策略,但没有用。网上有很多类似的问题,但在这种情况下没有明确的解决方案。
我是否需要为新的非托管实体中的id
列分配特定值?我是否需要在id
列所在的表中设置特定值(我只设置它是主键)?
使用identity通过DB生成ID:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
不要添加optional = false,nullable = false。主键在RDBS中永远不会为空。
你用的是什么数据库?
https://docs.oracle.com/javaee/6/api/javax/persistence/GenerationType.html#AUTO声明持久性提供者将选择最合适的解决方案。
如果您正在使用Hibernate,请明确正确设置方言吗?我经常看到Hibernate尝试猜测正确的方言,但却弄错了。这可能导致AUTO策略的多米诺骨牌效应选择不当。