我创建了一个触发器,以便每次将实体ID插入到我的Oracle数据库中时,都会使用序列自动生成实体ID。
问题来自为Hibernate / JPA注释这些实体:我需要定义一个@GeneratedValue
注释但我不想指定序列名称 - 这样做会使Hibernate首先查询序列,然后insert,这是一个已经由触发器完成的工作。
有没有办法在我建议的场景中跳过@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)
}
答案 0 :(得分:0)
从你的代码, 我可以告诉你的是它与@GeneratedValue无关,它指定hibernate负责为你的实体生成和识别。在您的情况下,您正在为自己生成id,因此您必须手动设置该特定实体的ID。然后你不会再得到这个错误了,你可以尝试的另一件事就是使用@PrePersist用这个方法注释一个方法并尝试在其中为id赋值。我没有尝试过这个,但这应该按照这个答案来解决。
如果您的id是由数据库生成的,那么您应该在id字段上使用@GeneratedValue(strategy = GenerationType.AUTO)以及@Id注释。