【问题标题】:ORA-00904 invalid identifier only on hibernateORA-00904 无效标识符仅在休眠状态
【发布时间】:2020-06-08 23:35:32
【问题描述】:

我收到一个无效的标识符错误,但仅限于休眠状态。 如果我从休眠日志复制查询并在我的 SQL 客户端上运行它,它就像一个魅力。

用户.java

@Entity
@Table(name = "MCI_USER", schema = Constantes.DB_SCHEMA)
@Inheritance(strategy = InheritanceType.JOINED)
public class User implements Entidade<Integer>, Serializable{
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "ID")
    private Integer id;

    @Column(name = "NOME")
    private String nome;

    @Column(name = "EMAIL")
    private String email;

    @Column(name = "NUIT")
    private String nuit;

    @Column(name = "ATUALIZADOEM")
    private LocalDate atualizadoEm;

    @ManyToOne
    @JoinColumn(name = "ATUALIZADOPOR")
    private Usuario atualizadoPor;

    @Column(name = "CRIADOEM")
    private LocalDate criadoEm;

    @ManyToOne
    @JoinColumn(name = "CRIADOPOR")
    private Usuario criadoPor;

    //getters and setters

Usuario.java:

@Entity
@Table(name = "Usuario", schema = Constantes.DB_SCHEMA)
public class Usuario extends User implements UserDetails {

    @Column
    private String senha;

    @Column
    private String chaveApi;

    @Column
    private boolean ativo = true;

    @OneToMany(mappedBy = "usuario", cascade = CascadeType.ALL, orphanRemoval = true)
    private List<PerfilDoUsuario> perfis = new ArrayList<>();

    @ManyToOne
    @JoinColumn(name = "IdUnidade")
    private Unidade unidade;

    @ManyToOne
    @JoinColumn(name = "idDepartamento")
    private Departamento departamento;

    //getters and setters...

创建表脚本:

CREATE TABLE mci_user
(
    Id    INTEGER generated as identity NOT NULL,
    Nome  VARCHAR(1000)    NOT NULL,
    Email VARCHAR(200)     NOT NULL,
    NUIT  CHAR(9),
    criadoPor     int,
    criadoEm      timestamp,
    atualizadoPor int,
    atualizadoEm  timestamp,

    CONSTRAINT PK_User PRIMARY KEY (Id)
);

CREATE TABLE usuario
(
    Id             INTEGER NOT NULL,
    Senha          VARCHAR(1000)    NOT NULL,
    ChaveApi       VARCHAR(32),
    Ativo          NUMBER(3)              NOT NULL,
    IdUnidade      INT,
    IdDepartamento INT,

    CONSTRAINT PK_Usuario PRIMARY KEY (Id),
    CONSTRAINT FK_Usuario_User FOREIGN KEY (Id) REFERENCES mci_user (Id),
    CONSTRAINT FK_Usuario_Unidade FOREIGN KEY (IdUnidade) REFERENCES unidade (IdUnit),
    CONSTRAINT FK_Usuario_Departamento FOREIGN KEY (IdDepartamento) REFERENCES departamento (Id)
);

错误日志:

12:11:23,629 INFO  [stdout] (default task-16) Hibernate: select usuario0_.ID as ID1_11_, usuario0_1_.CRIADOEM as CRIADOEM2_11_, usuario0_1_.CRIADOPOR as CRIADOPOR7_11_, usuario0_1_.ATUALIZADOEM as ATUALIZADOEM3_11_, usuario0_1_.ATUALIZADOPOR as ATUALIZADOPOR8_11_, usuario0_1_.EMAIL as EMAIL4_11_, usuario0_1_.NOME as NOME5_11_, usuario0_1_.NUIT as NUIT6_11_, usuario0_.ativo as ativo1_30_, usuario0_.chaveApi as chaveApi2_30_, usuario0_.idDepartamento as idDepartamento5_30_, usuario0_.senha as senha3_30_, usuario0_.IdUnidade as IdUnidade6_30_ from mci.Usuario usuario0_ inner join mci.MCI_USER usuario0_1_ on usuario0_.ID=usuario0_1_.ID where usuario0_1_.EMAIL=?
12:11:24,759 WARN  [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-16) SQL Error: 904, SQLState: 42000
12:11:24,760 ERROR [org.hibernate.engine.jdbc.spi.SqlExceptionHelper] (default task-16) ORA-00904: "USUARIO0_1_"."ATUALIZADOPOR": identificador inválido

使用 oracle 12c 和休眠 5

【问题讨论】:

    标签: java oracle hibernate


    【解决方案1】:

    我知道已经晚了,但据我所见,它只是在 atualizadoPor 属性中失败,因为它是 Usuario 类型,并且在 Usuario 类中,您还没有定义作为主键的 id 属性

    @Entity
    @Table(name = "Usuario", schema = Constantes.DB_SCHEMA)
    public class Usuario extends User implements UserDetails {
    
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        @Column(name = "ID")
        private Integer id;
    
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-08-08
      • 2022-01-22
      • 2011-08-27
      • 2011-04-21
      • 2019-06-29
      • 2013-10-20
      • 2017-12-29
      相关资源
      最近更新 更多