Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Hibernar, id, oráculo, sequência


Eu também tinha um projeto onde um banco de dados Oracle que fornece os dados para minhas classes @Entity. Como você disse, uma sequência gera o id para o PK da tabela através de um trigger. Estas foram as anotações que usei em uma dessas aulas:
@Id
@GeneratedValue(strategy = GenerationType.AUTO, generator = "G1")
@SequenceGenerator(name = "G1", sequenceName = "LOG_SEQ")
@Column(name = "ID", unique = true, nullable = false, precision = 22, scale = 0)
public int getId() {
    return this.id;
}

Esta é a segunda sintaxe que você mostrou em seu post. Não há chamada para o gatilho no código Java porque o gatilho é gerenciado pelo banco de dados. Lembro que tinha que ter a sequência e o gatilho ao mesmo tempo no banco de dados se não quisesse ter problemas. A trigger perguntou se o id da linha a inserir é nulo ou =0. Neste caso a sequência LOG_SEQ é chamada.

Portanto, se você fornecer um valor para o @Id de sua entidade, ele poderá ser inserido no banco de dados (se esse ID não existir) e a sequência não será chamada. Tente ver o código do gatilho para ver exatamente o que acontece.