我将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;
}
}
这种方法在Hibernate 4.1.x中很好用,但是在EclipseLink 2.x中却没有。
编辑
问题内容: 我的实体具有以下结构: 我得到以下异常: 当我在Intermed类上将@MappedSuperclass更改为@Entity时,一切正常。使用@MappedSuperclass和@SequenceGenerator是否有任何问题?还是我错过了什么? 问题答案: 这是JPA 1.0规范对注释的说明: 9.1.37 SequenceGenerator批注 该注解定义了可以由名称当用于指定的
问题内容: 我有一个班级,其显示设置设置为Java,现在我将其设置为,我知道我可以使用with 进行此操作,但是用班级进行清洁的最干净的方法是什么? 问题答案: 您 可以使用数组(MDC链接,MSDN链接) 来 执行操作,实际上是更改与类相关的样式规则,但是坦率地说,您最好拥有一个单独的样式来定义,然后删除该样式(如changelog所述)从元素开始,当您希望它们不再隐藏时。
我有以下Java超类,每个属性都有构造函数、getter和setter: 和一个car子类,它扩展了vehicle超类,并具有几个独特的属性: 我创建一个新的vehicle对象链表,并向其中添加一个新的car对象: 我可以用下面这样的函数更改属于vehicle超级类的任何属性: 但是当我试图创建一个类似的函数来更改其中一个子类属性时,我得到了这个错误:“方法setWheels(int)对于类型Ve
我有类A和子类B和C。 我使用inheritanceType.single_table,一列type用作discriminatorColumn。 前面,B类有DiscriminatorValue(“1”),C类有DiscriminatorValue(“2”)。我有大约100多个条目在表中,所有的工作都很好。 会有什么问题?
我有以下实体,它是应用程序中每个其他实体的基础实体: 我的目标是有两个表——图像和文件,以便这两个表共享给所有扩展BaseEntity的实体。我确实意识到,为此,所有扩展BaseEntity的实体都应该有一个共享id序列。 然后我有两个实体,它们是BaseEntity的子类型: 现在,当我设置时,hibernate为我生成以下表: 但是,我想要四张桌子: 我真的很感激任何帮助, 谢啦
问题内容: 我想更改给定td标签ID的td标签的类: 我希望能够在其他dom对象的click事件中执行此操作。如何获取TD的ID并更改其类别? 问题答案: 您可以使用来 设置 类(无论它 是 什么),如下所示: 如果要 添加 类,请改用,如下所示: 或者是使用以下方法交换类的简便方法: 这是专门针对attribute 的jQuery方法的完整列表 。