我将 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
我想用它作为我的序列生成器。我如何从我的子类中设置它?我想我需要重写@GenerateValue并使用@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;
}
}
@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;
}
}
- 这种方法在 Hibernate 4.1.x 中运行良好,但在 EclipseLink 2.x 中则不然。
edit
- 根据评论,它似乎可以与 EclipseLink 2.6.1-RC1 一起使用。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)