Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.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 是否可以使用一个存储库来选择不同表中的子类?_Java_Jpa_Spring Data Jpa_Jpa 2.0 - Fatal编程技术网

Java 是否可以使用一个存储库来选择不同表中的子类?

Java 是否可以使用一个存储库来选择不同表中的子类?,java,jpa,spring-data-jpa,jpa-2.0,Java,Jpa,Spring Data Jpa,Jpa 2.0,我想使用一个存储库从不同的表中选择实体。 我使用Spring数据JPA,并有自己的查询方法: @Query(value = "SELECT * FROM ?=1 WHERE ref_id=?2", nativeQuery = true) BaseEntity findByRefId(String tableName, Long refId); 第一个问题,是否可以通过某种方式传递表名?因为现在我正在对表名进行编码 接下来我有两个子类EntityOne和EntityTwo。它们的字段列与Base

我想使用一个存储库从不同的表中选择实体。 我使用Spring数据JPA,并有自己的查询方法:

@Query(value = "SELECT * FROM ?=1 WHERE ref_id=?2", nativeQuery = true)
BaseEntity findByRefId(String tableName, Long refId);
第一个问题,是否可以通过某种方式传递表名?因为现在我正在对表名进行编码

接下来我有两个子类EntityOne和EntityTwo。它们的字段列与BaseEntity相同,但必须位于不同的表中

@MappedSuperclass // or @Inheritance(strategy = InheritanceType.TABLE_PER_CLASS) and @Entity    
BaseEntity
        |
        @Entity
        EntityOne
        |
        @Entity
        EntityTwo
我已经尝试对BaseEntity使用@MappedSuperclass注释。但它不起作用,我得到一个例外,BaseEntity必须被注释为@Entity。 此外,我还尝试将BaseEntity注释为@Entity和@InheritanceSenategy=InheritanceType.TABLE\u PER\u类,但我得到了SQLException:未找到列“clazz\u”。我甚至没有那个专栏。

来自spring文档

请看示例2.12

您可以使用SpEL执行此操作:

  @Query("select t from #{#entityName} t where t.attribute = ?1")
  List<T> findAllByAttribute(String attribute);

你为什么要这么做?这不是Spring数据的概念:保存数据很有效。但我需要使用自己的查询进行选择。为什么?我的意思是,每个实体都有一个存储库是一个很好的概念,如果BaseEntity是一个实体而不是MappedSuperclass,您可以这样做。尝试此操作时出现的错误是因为您使用的是本机查询。进一步见: