Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用oracle和hibernate生成的值不起作用_Oracle_Spring_Hibernate_Jpa_Spring Roo - Fatal编程技术网

使用oracle和hibernate生成的值不起作用

使用oracle和hibernate生成的值不起作用,oracle,spring,hibernate,jpa,spring-roo,Oracle,Spring,Hibernate,Jpa,Spring Roo,我在使用Oracle XE数据库的项目中遇到了GeneratedValue注释的问题。该值根本不会生成-我在尝试使用自动生成字段在表中插入行时一直会遇到错误 "Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("SYSTEM"."T_VAPP"."VAPPID")" 完全相同的代码适用于Derby或MySQL,但我需要使其适用于Oracle,它似乎忽

我在使用Oracle XE数据库的项目中遇到了GeneratedValue注释的问题。该值根本不会生成-我在尝试使用自动生成字段在表中插入行时一直会遇到错误

"Caused by: java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("SYSTEM"."T_VAPP"."VAPPID")"
完全相同的代码适用于Derby或MySQL,但我需要使其适用于Oracle,它似乎忽略了我在生成的字段定义中输入的任何内容。我尝试使用GenerationType.TABLE、GenerationType.SEQUENCE,但相同的错误仍然存在。我还使用OracleSQLDeveloper验证了代码中定义的序列都没有被创建。我错过了什么

@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;

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

GenerationType.AUTO
是正确的--这将确保您的代码适用于oracle和mysql(无需更改代码)。我这样使用它,从来没有任何问题

尝试删除
@Roo
魔法,生成setter/getter,看看这是否有帮助。顺便说一句,我通常对getter进行注释。我不认为这是个问题,但是如果其他一切都失败了,你可以尝试一下


我的猜测是roo和hibernate之间存在一些问题(我从未使用过或阅读过roo,因此这确实是一个猜测)。

我怀疑它可能会变得混乱,因为您在两个地方告诉它标识符字段是什么。另外,您可以通过@Table和@rookpaactiveRecord注释中的参数来说明这一点。您可能应该删除类上@RooJpaActiveRecord注释中的所有参数。在类“Id”成员上保留@Id和@Column注释,在类上保留@Table注释


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

AUTO for oracle将选择sequence generator(这就是为什么它被称为“AUTO”)。事实上,标识符定义太多了。我按照描述删除了它们,但仍然是相同的错误。Spring Roo只是使用AspectJ来简化POJO,例如在编译时在AJ文件中生成所有get/set方法,即幕后的toString()方法。它还提供了其他一些帮助,但在大多数情况下,Roo注释只是通过删除样板文件来简化java代码。