Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.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
Java 带生成器的Oracle JPA GenerationType.AUTO要求“使用”;休眠“U序列”;_Java_Oracle_Hibernate_Jpa - Fatal编程技术网

Java 带生成器的Oracle JPA GenerationType.AUTO要求“使用”;休眠“U序列”;

Java 带生成器的Oracle JPA GenerationType.AUTO要求“使用”;休眠“U序列”;,java,oracle,hibernate,jpa,Java,Oracle,Hibernate,Jpa,我正在尝试使用Oracle JPA中定义的序列生成,以及GenerationType.AUTO,如下所示: @Id @SequenceGenerator(name = "MY_GEN_NAME", sequenceName = "MY_SQ_NAME") @GeneratedValue(strategy = GenerationType.AUTO, generator = "MY_GEN_NAME") @Column(name = "ID", nullable = false) private

我正在尝试使用Oracle JPA中定义的序列生成,以及GenerationType.AUTO,如下所示:

@Id
@SequenceGenerator(name = "MY_GEN_NAME", sequenceName = "MY_SQ_NAME")
@GeneratedValue(strategy = GenerationType.AUTO, generator = "MY_GEN_NAME")
@Column(name = "ID", nullable = false)
private Long id;
运行hibernate验证后,会抛出一个错误:

架构验证:缺少序列[hibernate_序列]

我猜,它忽略了我的
我的\u GEN\u NAME
,并试图使用该全局序列生成id

当我切换到
GenerationType.SEQUENCE
时,它使用
sequenceHilGenerator
,并且工作正常


为什么会发生这种情况?是否有可能使
GenerationType.AUTO
与Oracle的给定序列一起工作(可能切换到其他db)?

AUTO
对JPA提供商说,“选择您想要的”,在这种情况下它不会使用“生成器”属性


如果要使用序列,请将策略设置为
SEQUENCE
!这样,它将使用您定义的序列定义

AUTO
对JPA提供者说,“选择您想要的”,在这种情况下,它不会使用“生成器”属性

如果要使用序列,请将策略设置为
SEQUENCE
!这样,它将使用您定义的序列定义

虽然建议这样做可以,但对于某些版本的Hibernate,它似乎已被破坏,请参阅

编辑:在5.2.0中被破坏,在5.2.8中未被破坏。

虽然建议这样做会起作用,但对于某些版本的Hibernate,它似乎被破坏,请参阅


编辑:在5.2.0中被破坏,在5.2.8中未被破坏。

我认为oracle没有这个功能。没有“真正”的自动增量功能。你必须使用序列。等等。我想你没有正确理解我的问题。我不想使用“自动增量”。我想使用自己定义的序列以及
GenerationType.AUTO
。假设我已经只读了Oracle DB,其中创建了序列,但是在实现中我必须准备好切换到MySQL(这就是为什么
AUTO
,而不是
SEQUENCE
)。然而,当我使用
AUTO
——即使我告诉JPA使用什么序列,它仍然会寻找或尝试创建全局
hibernate\u序列。我认为oracle没有这个功能。没有“真正”的自动增量功能。你必须使用序列。等等。我想你没有正确理解我的问题。我不想使用“自动增量”。我想使用自己定义的序列以及
GenerationType.AUTO
。假设我已经只读了Oracle DB,其中创建了序列,但是在实现中我必须准备好切换到MySQL(这就是为什么
AUTO
,而不是
SEQUENCE
)。然而,当我使用
AUTO
——即使我告诉JPA使用什么序列,它仍然会寻找或尝试创建全局
hibernate\u序列。我刚找到它。这是误导吗?它说的正是我刚才说的。。。您选择AUTO并将其留给JPA提供商来决定。如果您对不同的JPA提供程序使用“AUTO”,您可以使用TABLE generator或其他方法获得它。我的意思是:“现在,当数据库使用序列时,可以使用GenerationType.AUTO并仍然控制序列的名称:”我确实像示例中的代码所说,序列仍然是“hibernate_序列”-这不是你想要的。你试图使用的东西不在你的JPA提供商的文档中,将来很容易改变(如果有用的话),并且发布的人甚至不是该软件的开发人员。因此你可以得出这样的结论,那是完全不可靠的,关键是我的代码中有我被支持重构的代码。它又大又旧,但很多人说它管用。White我不能将它用于他们提供的db模式。我试图弄明白为什么他们在@SequenceGenerator显然不工作的情况下使用AUTO和@SequenceGenerator。不管怎样,谢谢你的帮助。那帖子呢。我刚找到它。这是误导吗?它说的正是我刚才说的。。。您选择AUTO并将其留给JPA提供商来决定。如果您对不同的JPA提供程序使用“AUTO”,您可以使用TABLE generator或其他方法获得它。我的意思是:“现在,当数据库使用序列时,可以使用GenerationType.AUTO并仍然控制序列的名称:”我确实像示例中的代码所说,序列仍然是“hibernate_序列”-这不是你想要的。你试图使用的东西不在你的JPA提供商的文档中,将来很容易改变(如果有用的话),并且发布的人甚至不是该软件的开发人员。因此你可以得出这样的结论,那是完全不可靠的,关键是我的代码中有我被支持重构的代码。它又大又旧,但很多人说它管用。White我不能将它用于他们提供的db模式。我试图弄明白为什么他们在@SequenceGenerator显然不工作的情况下使用AUTO和@SequenceGenerator。无论如何,谢谢你的帮助。