【发布时间】:2014-07-02 08:51:22
【问题描述】:
我创建了一个触发器,以便每次将实体 ID 插入到我的 Oracle 数据库中时,它们都会自动生成一个序列。
问题在于为 Hibernate/JPA 注释这些实体:我需要定义一个 @GeneratedValue 注释,但我不想指定序列名称——这样做会使 Hibernate 先查询序列,然后插入,这是触发器已经完成的工作。
在我提出的场景中,有什么方法可以跳过@GeneratedValue 中的这个序列?
如果没有提供 id,我会得到异常:
org.hibernate.id.IdentifierGenerationException: ids for this class must be manually assigned before calling save(): Pattern
模式类:
@Entity
@Table(name = "PATTERN")
public class Patron extends HistoricoAbstractEntity {
/**
*
*/
private static final long serialVersionUID = 1L;
@Id
@Column(name = "ID_PATTERN")
private Integer idPattern;
@Column
private String description;
@Column(name = "NEGATIVE")
private Boolean isNegative;
@Column(name = "type")
private Integer type;
@Column(name = "N_DAYS")
private Integer numDays;
... (getters & setters)
}
【问题讨论】:
-
如果您已经在使用您的实现生成 id,请告诉您使用 @GeneratedValue 的需要是什么。
-
如果我不指定 id,Hibernate 会告诉我不能使用
save方法。 -
你需要指定一个id但是没有必要使用@GeneratedValue,如果你不在你的实体中指定@Id就使用@Id然后hibernate会报错。
-
我使用了@Id 注解,但如果我没有为实体提供标识符,Hibernate 会抱怨。
-
你能发布投诉信息和你的实体类吗?