首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有oracle和hibernate的GeneratedValue不起作用

带有oracle和hibernate的GeneratedValue不起作用
EN

Stack Overflow用户
提问于 2012-11-17 23:01:19
回答 3查看 4K关注 0票数 2

我在使用Oracle数据库的项目中遇到了GeneratedValue注释的问题。这个值就是不能生成--当我尝试在带有自动生成的字段的表中插入行时,我总是得到错误。

代码语言:javascript
复制
"Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("SYSTEM"."T_VAPP"."VAPPID")"

完全相同的代码适用于Derby或MySQL,但我需要使其适用于Oracle,并且它似乎忽略了我放在生成的字段定义中的任何内容。我尝试使用GenerationType.TABLE、GenerationType.SEQUENCE,但同样的错误仍然存在。我还使用Oracle SQL developer验证了代码中定义的序列都没有被创建。我在这里错过了什么?

代码语言:javascript
复制
@Entity
@Table(name = "T_vApp")
@RooJavaBean
@RooToString
@RooJpaActiveRecord(identifierColumn = "vAppId", identifierField = "id",  table = "T_vApp")
public class VLabApplication {



  @Id
  @GeneratedValue(strategy=GenerationType.AUTO, generator="my_entity_seq_gen")
  @SequenceGenerator(name="my_entity_seq_gen", sequenceName="MY_ENTITY_SEQ")
  @Column(name = "vAppId" )
  private Long id;
EN

回答 3

Stack Overflow用户

发布于 2012-11-18 23:51:32

GenerationType.AUTO是正确的-这将确保您的代码可以在oracle和mysql上运行(无需更改您的代码)。我像这样使用它,从来没有遇到过任何问题。

尝试删除@Roo的魔力,生成setter/getter,看看这是否有帮助。顺便说一句,我通常给getter加注解。我不认为这是问题所在,但如果其他方法都失败了,你可以随时尝试。

我的猜测是roo和hibernate之间存在一些问题(我从来没有使用过,也没有读过关于roo的内容,所以这只是一个猜测)。

票数 2
EN

Stack Overflow用户

发布于 2012-11-19 10:22:47

我怀疑它可能被混淆了,因为您在两个地方告诉它标识符字段是什么。另外,您可以使用@Table和@RooJpaActiveRecord注释中的参数来告诉它。您可能应该从类的@RooJpaActiveRecord注释中删除所有参数。将@Id和@Column注释保留在类"id“成员上,将@Table注释保留在类上。

或者,您可能需要切换到基于哪个数据库执行正确操作的自定义生成器类。

票数 2
EN

Stack Overflow用户

发布于 2012-11-18 00:43:26

您使用了GenerationType.AUTO而不是GenerationType.SEQUENCE

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13431785

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档