我想有一个具有自动IdGeneration策略的实体,我需要它在Oracle和MySQL上都能工作,我需要为每个实体指定序列名称。
当我将主键注释为:
@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.AUTO, generator="sequence")我在MySQL上得到了一个错误,序列生成器未知。
如果我使用
@Id
@Column(name="id")
@GeneratedValue(strategy= GenerationType.AUTO)我不能为每个表指定序列名称。这是解决这个问题的一种方法吗?
我使用Hibernate作为我的JPA提供者
发布于 2011-04-05 15:26:05
将id字段声明为:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY,
generator = "LegacyIdGenerator")
@GenericGenerator(
name = "LegacyIdGenerator",
strategy = "com.backend.hibernate.PenetratingIdGenerator")其中PenetratingIdGenerator是您的自定义ID生成器实现的IdentifierGenerator接口。现在,您可以根据需要在底层数据库的依赖项中生成ID。无论以何种方式,您的应用程序都会知道数据库是底层的,因为您需要在配置文件中定义不同的方言等。
发布于 2015-10-13 18:25:30
对于注释@GeneratedValue(strategy = GenerationType.AUTO),JPA持久性提供程序将针对特定数据库采取适当的策略。对于Oracle数据库,这将是SEQUENCE,如果您不指定任何内容,Hibernate将使用单个全局序列,即hibernate_sequence。
@Id
@GeneratedValue(strategy=GenerationType.AUTO, generator="seq_gen_default")
@SequenceGenerator(name="seq_gen_default", sequenceName="ENTITY_SEQ")
private Long id;https://stackoverflow.com/questions/5534301
复制相似问题