首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >MappedSuperclass -更改子类中的SequenceGenerator

MappedSuperclass -更改子类中的SequenceGenerator
EN

Stack Overflow用户
提问于 2011-12-21 20:35:52
回答 2查看 20.5K关注 0票数 34

我正在使用JPA2和Hibernate,并试图为我的实体引入一个公共基类。到目前为止,看起来是这样的:

代码语言:javascript
复制
@MappedSuperclass
public abstract class BaseEntity {

    @Id
    private Long id;

    @Override
    public int hashCode() {
        // ...
    }

    @Override
    public boolean equals(Object obj) {
        // ...
    }

    public Long getId() {
        return this.id;
    }

    public void setId(Long id) {
        this.id = id;
    }
}

但是,每个表都有一个序列$entityname_seq,我想用它作为我的序列生成器。我如何从我的子类中设置它?我想我需要覆盖@GeneratedValue并用@SequenceGenerator创建一个新的SequenceGenerator。

EN

回答 2

Stack Overflow用户

发布于 2015-09-12 01:36:01

在EclipseLink中,您可以使用CustomizerDescriptorCustomizer接口定义了一种定制有关JPA描述符(也称为持久性实体)的所有信息的方法。

代码语言:javascript
复制
public class SequenceCustomizer implements DescriptorCustomizer {

    @Override
    public void customize(ClassDescriptor descriptor) throws Exception {
        descriptor.setSequenceNumberName(descriptor.getTableName());
    }
}

在映射的超类中:

代码语言:javascript
复制
@MappedSuperclass
@Customizer(SequenceCustomizer.class)
public abstract class AbstractEntity implements Serializable {
    ...
}
票数 4
EN

Stack Overflow用户

发布于 2019-10-24 22:17:38

我写这篇文章是因为它太难读了,因为它是对公认答案的评论:

我有一个其他实体都继承的BaseEntity

BaseEntity.java:

代码语言:javascript
复制
@MappedSuperclass
public abstract class BaseEntity {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "SEQ_ID")
    private Long id;

然后我有两个实体UserOrder,这两个实体都继承自BaseEntity,同时也有@SequenceGenerator注释:

User.java:

代码语言:javascript
复制
@SequenceGenerator(name = "SEQ_ID", sequenceName = "SEQ_USER", allocationSize = 1)
public class User extends BaseEntity { ... }

Order.java:

代码语言:javascript
复制
@SequenceGenerator(name = "SEQ_ID", sequenceName = "SEQ_ORDER", allocationSize = 1)
public class Order extends BaseEntity { ... }

它至少可以在H2上使用2个序列SEQ_USERSEQ_ORDERS

代码语言:javascript
复制
select SEQ_USER.nextval from dual;
select SEQ_ORDERS.nextval from dual;
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8589928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档