java - Oracle 中没有序列的@GenelatedValue

标签 java oracle hibernate jpa

我创建了一个触发器,以便每次将我的实体 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 分配一个值。我还没有尝试过这个,但这应该根据这个答案工作。

Assign Custom Identifier

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

关于java - Oracle 中没有序列的@GenelatedValue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23652289/

相关文章:

java - 配置 Jersey 1.18.x 服务器以进行 JSON POJO 映射

java - Google App Engine (GAE) 上的高性能 Java 对象序列化

sql - 为什么这个查询要进行全表扫描?

java - 转换为条件查询

java - 将 Hibernate EntityManager 保持在 Runnable 中

java - 如何将 <br/> 标签插入 java String

java - 构造函数是 OOP 的哪一部分?

oracle - 在验证(PL/SQL)中如何知道页面项是否已更新?类似于JS中的apex.item().isChanged

sql - 将时间戳/日期时间从 UTC 转换为 EST Oracle SQL

java - 使用 jersey 和 spring 在 REST 中服务的空指针