Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在JPQL中使用列名而不是实体属性_Java_Hibernate_Jpa_Jpql - Fatal编程技术网

Java 在JPQL中使用列名而不是实体属性

Java 在JPQL中使用列名而不是实体属性,java,hibernate,jpa,jpql,Java,Hibernate,Jpa,Jpql,我有JPQL/Hibernate用于DA层。 我有如下表格: CREATE TABLE Log_Tbl ( id number, name varchar2(30), ); @Entity @Table(name = "Log_Tbl") public class ELog { @Column(name = "id") private long entity_id; @Column(name = "name") private String entity_name; }

我有
JPQL/Hibernate
用于
DA
层。 我有如下表格:

CREATE TABLE Log_Tbl
(
id number,
name varchar2(30),
);
@Entity
@Table(name = "Log_Tbl")
public class ELog
{
  @Column(name = "id")
  private long entity_id;

  @Column(name = "name") 
  private String entity_name;
}
我在上表中有一个实体,如下所示:

CREATE TABLE Log_Tbl
(
id number,
name varchar2(30),
);
@Entity
@Table(name = "Log_Tbl")
public class ELog
{
  @Column(name = "id")
  private long entity_id;

  @Column(name = "name") 
  private String entity_name;
}
并通过
jpa
Log
实体映射到
Log_Tbl
表格; 我有两个
JPQL
查询,如下所示:

CREATE TABLE Log_Tbl
(
id number,
name varchar2(30),
);
@Entity
@Table(name = "Log_Tbl")
public class ELog
{
  @Column(name = "id")
  private long entity_id;

  @Column(name = "name") 
  private String entity_name;
}
  • 从实体名称为“作业”的ELog中选择ELog
  • 从ELog中选择ELog,其中name='Job'
两个查询都返回了正确的结果。我的问题是:

为什么第二个查询返回正确的结果,尽管我使用了列名而不是
entity\u name
属性?

引用了一个类似的问题(如果不是重复的话)

当您在HQL查询的WHERE子句中使用Hibernate不知道的内容(例如,未在SQL方言中注册的函数)时,Hibernate会灵活地操作并将其直接传递给数据库


所以,它确实可以工作,但它是特定于供应商的,如果您切换JPA实现,它可能不会工作

第二个是非法的JPQL和不可移植的。@NeilStockton,但第二个查询执行并回答得很好,正如我所说的,它是无效的JPQL,如果它在您的JPA实现中工作,那么您在任何情况下都不能依赖它other@NeilStockton我的意思是你的答案是什么,它真的取决于
JPA
实现吗?(在我的情况下,它是
Hibernate
)是的,我的目标是确保它是特定于供应商的,并且可能不适用于其他
JPA
实现。