我在使用Oracle数据库的项目中遇到了GeneratedValue注释的问题。这个值就是不能生成--当我尝试在带有自动生成的字段的表中插入行时,我总是得到错误。
"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验证了代码中定义的序列都没有被创建。我在这里错过了什么?
@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;发布于 2012-11-18 23:51:32
GenerationType.AUTO是正确的-这将确保您的代码可以在oracle和mysql上运行(无需更改您的代码)。我像这样使用它,从来没有遇到过任何问题。
尝试删除@Roo的魔力,生成setter/getter,看看这是否有帮助。顺便说一句,我通常给getter加注解。我不认为这是问题所在,但如果其他方法都失败了,你可以随时尝试。
我的猜测是roo和hibernate之间存在一些问题(我从来没有使用过,也没有读过关于roo的内容,所以这只是一个猜测)。
发布于 2012-11-19 10:22:47
我怀疑它可能被混淆了,因为您在两个地方告诉它标识符字段是什么。另外,您可以使用@Table和@RooJpaActiveRecord注释中的参数来告诉它。您可能应该从类的@RooJpaActiveRecord注释中删除所有参数。将@Id和@Column注释保留在类"id“成员上,将@Table注释保留在类上。
或者,您可能需要切换到基于哪个数据库执行正确操作的自定义生成器类。
发布于 2012-11-18 00:43:26
您使用了GenerationType.AUTO而不是GenerationType.SEQUENCE
https://stackoverflow.com/questions/13431785
复制相似问题