Oracle11g 弹簧&x2B;甲骨文+;JPA&x2B;H2 ORA-00972:标识符太长

Oracle11g 弹簧&x2B;甲骨文+;JPA&x2B;H2 ORA-00972:标识符太长,oracle11g,spring-boot,spring-data,spring-data-jpa,Oracle11g,Spring Boot,Spring Data,Spring Data Jpa,我使用的是SpringBoot+H2+Oracle+JPA 当我使用H2时,一切正常。像插入和检索操作一样,工作正常。但当我在下面配置使用Oracle时,无论我对Oracle执行什么操作,它都会引发异常 database-platform: org.hibernate.dialect.Oracle10gDialect datasource: url: "jdbc:oracle:thin:@//localhost:1521/XE" username: root password: root dri

我使用的是SpringBoot+H2+Oracle+JPA

当我使用H2时,一切正常。像插入和检索操作一样,工作正常。但当我在下面配置使用Oracle时,无论我对Oracle执行什么操作,它都会引发异常

database-platform: org.hibernate.dialect.Oracle10gDialect
datasource:
url: "jdbc:oracle:thin:@//localhost:1521/XE"
username: root
password: root
driver-class-name: oracle.jdbc.OracleDriver
 Abc.java
 @Entity
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
 public class SampleRule 
 {

@ManyToOne(cascade = CascadeType.DETACH)
@RestResource(exported = false)
private Test test;
我创建了一个只有id和名称的简单测试类,并尝试用Oracle保存它,即使在Oracle中也可以正常工作。但我的老朋友不在甲骨文公司工作

database-platform: org.hibernate.dialect.Oracle10gDialect
datasource:
url: "jdbc:oracle:thin:@//localhost:1521/XE"
username: root
password: root
driver-class-name: oracle.jdbc.OracleDriver
 Abc.java
 @Entity
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
 public class SampleRule 
 {

@ManyToOne(cascade = CascadeType.DETACH)
@RestResource(exported = false)
private Test test;
下面是我的新Test.java,它可以在Oracle和H2中工作

Test.java     
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_GEN")
@SequenceGenerator(name = "SEQ_GEN", sequenceName = "TEST_SEQ", allocationSize = 1)
private long id;
private String name;
我的一个老类,可以很好地处理H2,但不能处理Oracle

database-platform: org.hibernate.dialect.Oracle10gDialect
datasource:
url: "jdbc:oracle:thin:@//localhost:1521/XE"
username: root
password: root
driver-class-name: oracle.jdbc.OracleDriver
 Abc.java
 @Entity
 @JsonInclude(JsonInclude.Include.NON_EMPTY)
 public class SampleRule 
 {

@ManyToOne(cascade = CascadeType.DETACH)
@RestResource(exported = false)
private Test test;
甚至Abc.java类也不是在Oracle中创建的,而是在H2中创建的


  • 为什么不使用导入脚本创建少数表?但它们是在我使用H2时创建的,而Oracle则不是

  • 何时使用@Table和@Column注释?如果我使用Oracle,那么我需要使用这些注释。因为即使没有这些注释,我的Test.java类也会被创建并保存到Oracle数据库中。我也能找回它。但当我试图检索它时,其他表会抛出错误


  • 谢谢

    “标识符太长”非常清楚。Oracle中的标识符不能超过30个字符。显然,JPA试图创建一个名称较长的表。打印由混淆层创建的SQL以查找有问题的语句您还可以至少包括一些异常堆栈,这可能会缩小它的范围。感谢您的回复!我真的不知道什么时候使用@Column注释,什么时候不使用。因为我的测试类没有任何@列,但它仍然是在Oracle中创建的,并且能够检索它。org.hibernate.tool.hbm2ddl.SchemaExport:HHH000389:不成功:删除表my_test_类级联约束org.hibernate.tool.hbm2ddl.SchemaExport:ORA-00972:标识符太长org.hibernate.tool.hbm2ddl.SchemaExport:HHH000388:不成功:插入我找到了解决方案。我把@Table(name=“Table_name”)作为类名,因为我的类名超过30个字符,然后我把@Table名称放在少于30个字符的地方,它在Oracle中工作。再次感谢。