【发布时间】:2022-01-23 13:14:34
【问题描述】:
所以我正在尝试进行本机查询以从 Oracle 数据库中获取一些数据,但我不断收到此错误:
java.sql.SQLSyntaxErrorException: ORA-00942: 表或视图没有 存在
我的查询是这个:
@Query(
value = "select d.* from DEFAULT_GROUP d " +
"inner join COMPANIA_DEFAULT_GROUP cd on d.ID = cd.DEFAULT_GROUP_ID " +
"inner join COMPANIA c on c.ID = cd.COMPANIA_ID " +
"where c.ID = cast(:companiaId AS NUMBER) and lower(d.NAME) like lower(cast(:dgName AS varchar(255))) ORDER BY d.NAME ASC " ,
nativeQuery = true
)
List<DefaultGroup> findDefaultGroupsByNameLike(@Param("companiaId") Long companiaId,@Param("dgName") String dgName);
我的实体Compania是这样的:
@Entity(name = "Compania")
@Table(
name = "compania"
)
public class Compania {
@Id
@SequenceGenerator(
name = "compania_sequence",
sequenceName = "compania_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.AUTO,
generator = "compania_sequence"
)
@Column(
nullable = false
)
private Long id;
@Column(
name = "name",
nullable = false,
unique = true
)
private String name;
@Column(
name = "dominio"
)
private String dominio;
@Column(
name = "altas"
)
private String altas;
@Column(
name = "bajas"
)
private String bajas;
@OneToMany(
cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
orphanRemoval = true
)
private List<DefaultGroup> default_group;
@OneToMany(
cascade = CascadeType.ALL,
fetch = FetchType.LAZY,
orphanRemoval = true
)
private List<Office> office;
public Compania() {
}
public Compania(String name, String dominio, String altas, String bajas, List<DefaultGroup> defaultGroup, List<Office> office) {
this.name = name;
this.dominio = dominio;
this.altas = altas;
this.bajas = bajas;
this.default_group = defaultGroup;
this.office = office;
}
... Getters and Setters...
而我的实体Default Group是这样的:
@Entity
@Table
public class DefaultGroup {
@Id
@SequenceGenerator(
name = "defaultGroup_sequence",
sequenceName = "defaultGroup_sequence",
allocationSize = 1
)
@GeneratedValue(
strategy = GenerationType.SEQUENCE,
generator = "defaultGroup_sequence"
)
@Column(
nullable = false
)
private Long id;
@Column(
name = "name",
nullable = false
)
private String name;
@Column(
name = "path",
nullable = false
)
private String path;
public DefaultGroup() {
}
public DefaultGroup(String name, String path) {
this.name = name;
this.path = path;
}
... Getters and Setters...
当我检查 Azure Insights 中的故障时,我发现它正在尝试这个 SQL:
/* 动态原生 SQL 查询/ select d. from DEFAULT_GROUP d inner 在 d.ID = cd.DEFAULT_GROUP_ID 内加入 COMPANIA_DEFAULT_GROUP cd 在 c.ID = cd.COMPANIA_ID 上加入 COMPANIA c,其中 c.ID = cast(? AS NUMBER) 和 lower(d.NAME) like lower(cast(?AS varchar(?))) ORDER BY d.NAME ASC
然后抛出一个500 internal server error和oracle错误代码ORA-00942: table or view does not exist
我在错误堆栈的末尾也看到了这个错误:
Caused by: Error : 942, Position : 141, Sql = /* dynamic native SQL query */ select d.* from DEFAULT_GROUP d inner join COMPANIA_DEFAULT_GROUP cd on d.ID = cd.DEFAULT_GROUP_ID inner join COMPANIA c on c.ID = cd.COMPANIA_ID where c.ID = cast(:1 AS NUMBER) and lower(d.NAME) like lower(cast(:2 AS varchar(255))) ORDER BY d.NAME ASC , OriginalSql = /* dynamic native SQL query */ select d.* from DEFAULT_GROUP d inner join COMPANIA_DEFAULT_GROUP cd on d.ID = cd.DEFAULT_GROUP_ID inner join COMPANIA c on c.ID = cd.COMPANIA_ID where c.ID = cast(? AS NUMBER) and lower(d.NAME) like lower(cast(? AS varchar(255))) ORDER BY d.NAME ASC , Error Msg = ORA-00942: table or view does not exist
我的另一个名为 OFFICE 的表也发生了同样的事情
数据库拥有的表是:
- 公司
- COMPANIA_DEFAULT_GROUP(两个实体的 ID)
- COMPANIA_OFFICE(两个实体的 ID)
- DEFAULT_GROUP
- 办公室
【问题讨论】:
标签: java sql oracle hibernate nativequery