ata*_*man 26 java jpa sequence java-ee 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;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,对于每个表都有一个$entityname_seq
我想用作序列生成器的序列.如何从我的子类中设置它?我想我需要覆盖@GeneratedValue并使用@SequenceGenerator创建一个新的SequenceGenerator.
rbe*_*nto 30
对的,这是可能的.您可以使用@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;
}
}
Run Code Online (Sandbox Code Playgroud)
序列(SQL)
create sequence role_seq;
Run Code Online (Sandbox Code Playgroud)派生类
@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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
Mik*_*unu 12
在JPA中,无法使用注释完成.注释本身不能被覆盖.实体从MappedSuperClass继承所有映射信息.只有两个注释可用于重新定义从映射的superClass继承的映射:
他们都没有帮助GeneratedValue.