java - MappedSuperclass - 在子类中更改SequenceGenerator

标签 java java-ee jpa sequence mappedsuperclass

我正在将JPA2与Hibernate结合使用,并尝试为我的实体引入一个公共的基类。目前看来:

@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。

最佳答案

是的,这是可能的。可以使用@SequenceGenerator注释覆盖默认生成器名称。
基本类

    @MappedSuperclass
    public abstract class PersistentEntity implements Serializable
    {
        private static final long serialVersionUID = 1L;

        @Id
        @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "default_gen")
        protected Long id = 0L;

        public Long getId()
        {
            return id;
        }

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

序列(SQL)
create sequence role_seq;

派生类
    @Entity
    @Table(name = "role")
    @SequenceGenerator(name = "default_gen", sequenceName = "role_seq", allocationSize = 1)
    public class Role extends PersistentEntity implements Serializable
    {
        private static final long serialVersionUID = 1L;

        @NotNull
        @Size(max = 32)
        private String name;

        public String getName()
        {
             return name;
        }

        public void setName(String name)
        {
             this.name = name;
        }   
    }

这种方法在Hibernate4.1.x中工作得很好,但在EclipseLink 2.x中却没有。
编辑
根据评论,它似乎正在与EclipseLink 2.6.1-RC1合作。

本文翻译自 https://stackoverflow.com/questions/8589928/

网站遵循 CC BY-SA 4.0 协议,转载或引用请注明出处。


相关文章:

java - 是否有JNDI名称空间约定?

java - Hibernate使用hbm.xml将多个类映射到一个表

java - EntityManager.persist()未将值插入数据库

java - 我真正使用的是哪个JRE?

java - 如何从ResultSet中仅使用JDBC获得5行?

java - 使用InstanceID和ReactiveX的IOException(MAIN_THREAD)

java - 带有2个互锁实体类的JPA删除

java - 使用Java代码中的tomcat连接池将数据库查询挂接到DB2服务器

java - Tomcat返回http状态错误:401,原因短语:未经授权[重复]

java - JPA:与确切类型的实体一对一关系