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