在子类的Hibernate中为每个表指定不同的序列
有没有办法为Hibernate中的每个表指定不同的序列,如果ID是在映射的超类上定义的?
我们的应用程序中的所有实体都扩展了一个名为DataObject
的超类,如下所示:
@MappedSuperclass public abstract class DataObject implements Serializable { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE) @Column(name = "id") private int id; } @Entity @Table(name = "entity_a") public class EntityA extends DataObject { ... } @Entity @Table(name = "entity_b") public class EntityB extends DataObject { ... }
这会导致所有实体使用共享序列,即默认的hibernate_sequence
。
我想要做的是为每个实体使用单独的序列,例如上面示例中的entity_a_sequence
和entity_b_sequence
。 如果在子类上指定了ID,那么我可以使用@SequenceGenerator
批注为每个实体指定序列,但在这种情况下,ID在超类上。 鉴于ID在超类中,是否有一种方法可以为每个实体使用单独的序列 – 如果是,那么如何?
(我们正在使用PostgreSQL 8.3,如果相关的话)
你试过这种方式吗?
@MappedSuperclass public abstract class DataObject implements Serializable { @Id @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "idgen") @Column(name = "id") private int id; } @Entity @SequenceGenerator(initialValue = 1, name = "idgen", sequenceName = "entityaseq") @Table(name = "entity_a") public class EntityA extends DataObject { } @Entity @SequenceGenerator(initialValue = 1, name = "idgen", sequenceName = "entitybseq") @Table(name = "entity_b") public class EntityB extends DataObject { }
对不起,我现在没有必要的环境来测试它,但我会稍后再试。
我们在所有JPA实体的抽象超类中使用它:
@Id @GeneratedValue(generator = "pooled") @GenericGenerator(name = "pooled", strategy = "org.hibernate.id.enhanced.TableGenerator", parameters = { @org.hibernate.annotations.Parameter(name = "value_column_name", value = "sequence_next_hi_value"), @org.hibernate.annotations.Parameter(name = "prefer_entity_table_as_segment_value", value = "true"), @org.hibernate.annotations.Parameter(name = "optimizer", value = "pooled-lo"), @org.hibernate.annotations.Parameter(name = "increment_size", value = "100")}) private Long id;
它有点冗长,但它允许设置prefer_entity_table_as_segment_value
,这意味着您不需要重复子类中的id
字段或生成器注释。
表生成stretergy 为每个表使用单独的db序列,但它的操作很少
IHMO还有更好的方法:
@Id @GeneratedValue(strategy = GenerationType.IDENTITY) private int id;
它适用于我的应用程序。
- 乐观锁定的重试机制(弹簧数据+ JPA)
- 获取org.hibernate.hql.ast.QuerySyntaxException虽然它工作正常的SQL服务器?
- 使用注释的Hibernate Enum映射
- HQL Hibernate INNER JOIN
- 如何在Wildfly中部署时使用persistence.xml设置hibernate.hbm2ddl.auto
- 文档没有保存在spring jpa文档管理器应用程序中
- 模型类在Hibernate中运行多个查询..!
- 从Spring MVC XML文件迁移到javaconfig。 我真的迷失了我的数据库XML文件
- 线程“main”中的exceptionorg.hibernate.HibernateException:访问stax流时出错