我创建了一个触发器,以便每次将我的实体 ID 插入到我的 Oracle 数据库中时,都会自动生成一个序列。
问题在于为 Hibernate/JPA 注释这些实体:我需要定义一个 @GenerateValue 注释,但我不想指定序列名称 - 这样做将使 Hibernate 查询先序列,再插入,这是触发器已经完成的工作。
有什么办法可以在我提出的场景中跳过 @GenerateValue 中的这个序列吗?
如果未提供 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)
}
最佳答案
根据你的代码, 我可以告诉你的是,它与 @GenerateValue 无关,它指定 hibernate 负责为你的实体生成和标识符。在您的情况下,您自己生成 id,因此您必须手动设置该特定实体的 id。然后你就不会再收到这个错误了,你可以尝试的另一件事是使用 @PrePersist 注释一个方法,并尝试为其中的 id 分配一个值。我还没有尝试过这个,但这应该根据这个答案工作。
如果您的 id 是由数据库生成的,那么您应该在 id 字段上使用 @GenerateValue(strategy=GenerationType.AUTO) 以及 @Id 注释。
关于java - Oracle 中没有序列的@GenelatedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23652289/