【发布时间】: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
【问题讨论】: