Oracle中的@GeneratedValue没有Sequence

时间:2014-05-14 10:39:09

标签: java oracle hibernate jpa

我创建了一个触发器,以便每次将实体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)

    }

1 个答案:

答案 0 :(得分:0)

从你的代码, 我可以告诉你的是它与@GeneratedValue无关,它指定hibernate负责为你的实体生成和识别。在您的情况下,您正在为自己生成id,因此您必须手动设置该特定实体的ID。然后你不会再得到这个错误了,你可以尝试的另一件事就是使用@PrePersist用这个方法注释一个方法并尝试在其中为id赋值。我没有尝试过这个,但这应该按照这个答案来解决。

Assign Custom Identifier

如果您的id是由数据库生成的,那么您应该在id字段上使用@GeneratedValue(strategy = GenerationType.AUTO)以及@Id注释。